微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于替换向量值的 For 循环

如何解决用于替换向量值的 For 循环

我不知道我的代码有什么问题。基本上我正在尝试做一个小版本的蒙特卡罗模拟。

这是我的输入

mydata=[1,4,20,23,37]
prediction=c(0,0)
randomvar=runif(12,1)

然后我有这个条件:

如果 randomvar 的第 i 个值 > 0.97,将 prediction 的第 i 个值替换为来自 mydata 的第 5 个数据

否则如果 randomvar 的第 i 个值 > 0.93,则将 prediction 的第 i 个值替换为来自 mydata 的第 4 个数据

否则如果 randomvar 的第 i 个值 > 0.89,则将 prediction 的第 i 个值替换为来自 mydata 的第三个数据

否则,如果 randomvar 的第 i 个值 > 0.85,则将 prediction 的第 i 个值替换为来自 mydata 的第二个数据

否则如果 randomvar 的第 i 个值 > 0.81,则将 prediction 的第 i 个值替换为来自 mydata 的第一个数据

否则为 0

所以我写了这个:

mydata=c(1,37)
prediction=c(0,0)
random=runif(12,1)
for (i in random) {
  if (i>0.97) prediction[i]=mydata[5]
  else if (i>0.93) prediction[i]=mydata[4]
  else if (i>0.89) prediction[i]=mydata[3]
  else if (i>0.85) prediction[i]=mydata[2]
  else if (i>0.81) prediction[i]=mydata[1]
  else prediction[i]=0
}
prediction

结果是

> prediction
 [1] 0 0 0 0 0 0 0 0 0 0 0 0

我想知道为什么代码不会根据上述条件更改预测值。任何人都可以帮助并解释原因吗?反正我是 R 新手

解决方法

代码不起作用,因为使用 runif 生成的随机值不是整数。

> random=runif(12,1)
> random
 [1] 0.78381826 0.97424261 0.87240491 0.20896106 0.95598721 0.11609102 0.02430861
 [8] 0.24213124 0.45808710 0.28205870 0.51469212 0.02672362

现在 prediction[i] 中的 irandom 中是没有意义的。

去做——

for (i in seq_along(random)) {
  if (random[i]>0.97) prediction[i]=mydata[5]
  else if (random[i]>0.93) prediction[i]=mydata[4]
  else if (random[i]>0.89) prediction[i]=mydata[3]
  else if (random[i]>0.85) prediction[i]=mydata[2]
  else if (random[i]>0.81) prediction[i]=mydata[1]
  else prediction[i]=0
}
prediction
> prediction
 [1]  0  0  0  0 20  4  0  0  0  0  0  0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。