【问题标题】:A For loop to replace vector value用于替换向量值的 For 循环
【发布时间】:2021-04-08 16:40:53
【问题描述】:

我无法弄清楚我的代码有什么问题。基本上我正在尝试做一个小版本的蒙特卡罗模拟。

这是我的意见

mydata=[1,4,20,23,37]
prediction=c(0,0,0,0,0,0,0,0,0,0,0,0)
randomvar=runif(12,0,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,4,20,23,37)
prediction=c(0,0,0,0,0,0,0,0,0,0,0,0)
random=runif(12,0,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 新手

【问题讨论】:

    标签: r for-loop if-statement montecarlo


    【解决方案1】:

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

    > random=runif(12,0,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
    

    【讨论】:

    • 谢谢你的回答,现在我发现根本问题出在数据的类型上。除此之外,您能解释一下为什么要将 i 更改为 random[i] 并且不能简单地在循环中使用 i 吗?
    • 仅仅因为i是索引号而不是向量中的第i个值。要替换向量中的值,我们必须使用vector[i]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2019-04-04
    相关资源
    最近更新 更多