如何解决用于替换向量值的 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]
中的 i
在 random
中是没有意义的。
去做——
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。