R语言计算各模拟组每小时价格对数变化标准差报错求助
报错原因
- 最直接的错误是函数调用符号用错:R中调用函数要使用圆括号
(),你代码里写的log[prices[j+1]]用了取子集的方括号[],log是R内置的特殊函数类型,不支持用方括号取子集,因此触发该报错。 - 除此之外原有代码还有多个逻辑错误:
- 变量名拼写不一致:内层循环定义的是
logchange,计算标准差时写的是logchanges,多了末尾的s - 空向量累加逻辑错误:内层循环每次都重新给
logchange赋值,没有累加每个时间段的对数变化值 - 索引逻辑错误:价格矩阵每行对应一个sim的5个时间点价格,原有循环没有按行取对应sim的价格数据
- 变量名拼写不一致:内层循环定义的是
实现需求的正确代码
先修正示例数据存储
# 构造示例数据 prices <- matrix(sample(40:100,25,replace=T),ncol=5,byrow=T) colnames(prices) <- c("P1","P2","P3","P4","P5") sim_data <- data.frame(sim=1:5, prices)
版本1:按循环思路修改实现
# 初始化存储结果的5x1向量 std_vec <- numeric(5) for (i in 1:5) { # 取出第i个sim的5个时间点价格,去掉第一列sim编号并转成数值型 sim_prices <- as.numeric(sim_data[i, 2:6]) # 计算相邻时间点的价格对数变化 log_changes <- diff(log(sim_prices)) # 计算标准差存入结果向量 std_vec[i] <- sd(log_changes) } # 输出最终5x1结果向量 std_vec
版本2:更简洁的向量化实现,无需手动写循环
# 按行处理价格矩阵,一行代码得到结果 std_vec <- apply(prices, 1, function(x) sd(diff(log(as.numeric(x)))))
说明:
apply函数第二个参数设为1代表按行处理,每一行的价格传入匿名函数,先转数值型再计算对数相邻差,最后求标准差,直接返回长度为5的结果向量。
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

