【问题标题】:nested for loop in R not producing the correct amount of iterationsR中的嵌套for循环没有产生正确的迭代次数
【发布时间】:2021-12-14 20:41:30
【问题描述】:

我有一个非常简单的 for 循环(或者我是这么认为的)。它的目的是在 20 种不同的条件下执行 1000 次动作。这应该提供 20,000 的结果。相反,我得到 1000。我的想法是我可能遗漏了一些非常微不足道的东西。

nSims <- 1000
Prop1 <- numeric(nSims * 20) 
Prop2 <- numeric(nSims * 20) 
Prop3 <- numeric(nSims * 20)
Score <- NA

for(i in 1:nSims){
for (j in 1:20){
G1 <- rnorm (10000, 100, 10)
G2 <- rnorm (10000, 100 - i/50, 10)
G3 <- rnorm (10000, 100 + i/50, 10)

Prop1 [i] = length (which (G1 > (100+j))) /length (G1)
Prop2 [i] = length (which (G2 > (100+j))) /length (G2)
Prop3 [i] = length (which (G3 > (100+j))) /length (G3)
Score [j] = 100 + j
}
}
sim <- data.frame (cbind (Prop1, Prop2, Prop3, Score))

对于 j 的每次迭代,输出应该是一个包含三个 1000 变量的数据帧。相反,我得到了 50 次 J 迭代,然后是很多 0。

【问题讨论】:

  • 您正在为每个 j 迭代重新分配和替换 Prop1 [i]、Prop2[i]...,
  • @GuedesBF 你是对的。我应该怎么做才能不重新分配?只需在外面添加道具并有sim [j]?

标签: r for-loop simulation


【解决方案1】:

您可以使用不同的索引 (k) 来保存计算。

nSims <- 1000
Prop1 <- numeric(nSims * 20) 
Prop2 <- numeric(nSims * 20) 
Prop3 <- numeric(nSims * 20)
Score <- NA
k <- 0

for(i in 1:nSims){
  for (j in 1:20){
    G1 <- rnorm (10000, 100, 10)
    G2 <- rnorm (10000, 100 - i/50, 10)
    G3 <- rnorm (10000, 100 + i/50, 10)
    k <- k + 1
    Prop1 [k] = length (which (G1 > (100+j))) /length (G1)
    Prop2 [k] = length (which (G2 > (100+j))) /length (G2)
    Prop3 [k] = length (which (G3 > (100+j))) /length (G3)
    Score [k] = 100 + j
  }
}
sim <- data.frame (Prop1, Prop2, Prop3, Score)

nrow(sim)
#[1] 20000

【讨论】:

  • 谢谢,我不知道你的 sim 中可以有不同的索引来存储计算。我认为索引必须与迭代相关联。
猜你喜欢
  • 1970-01-01
  • 2016-05-20
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多