You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:48:01