【问题标题】:Storing values from multiple for loop sequence iterations in r在r中存储来自多个for循环序列迭代的值
【发布时间】:2018-03-15 15:18:16
【问题描述】:

我正在使用两个 for 循环来运行一些模拟。一个每次迭代将 N 增加 50,另一个在其中运行模拟 1000 次。然而,就我目前所拥有的结果数据框而言,它不会保存 N 的每个不同序列值的输出,而是仅显示序列中 N 的最后一个值的最终输出值,在这种情况下,N = 500 的值。

所以我想知道有没有办法制作一个数据框来保留所有不同 N 值的所有输出值?

for (N in seq(100,500,50)) {
  P <- rep(NA,1000)
  for (i in 1:1000) {
    P[i] <- function()
  }
  result <- data.frame(P) # this is simplified 
}

【问题讨论】:

  • 初始化data.frame并将其填充到循环中。
  • 对不起,当您说初始化 data.frame 时,您的意思是我应该在 for 循环之外创建一个空白数据框,然后用迭代结果填充它?
  • 假设function()的输出是一个data.frame,你可以将P中的每个输出作为一个列表存储,但是你需要在循环外初始化P`P . Your for`循环将在P中创建1000个条目,每个输出一个f(i)
  • @Mako212 所以这里的 function() 实际上是 pchisq() 函数。因此,每 1000 次运行的最终结果都是 p 值,然后我将其放入结果数据框中。像你建议的那样列出一份清单仍然有用吗?

标签: r for-loop


【解决方案1】:

要存储循环中的值,首先需要初始化对象,然后可以通过指定索引一次添加一个值。

# create an empty data frame
P <- data.frame(PValue = numeric(), NValue=numeric())
P2 <- list()    

for (N in 1:10){
  for (i in 1:10){
    P[i, 1] <- pchisq(i, df=3)
    P[i, 2] <- N
  }
  # store each output from the inner loop in a list
  P2[[N]] <- P
}
# collapse the list down to a single data frame
final <- do.call(rbind, P2)

【讨论】:

  • 对不起,但这并不能解决我的问题。我仍然只得到序列中 N 的最后一个值的 P 值,而不是 N 的所有值的值。
  • @SamFenton 查看我的编辑,我认为您需要将第一个 for 循环的输出分配给第二个列表。
  • 是的,这可以为我提供所有不同 N 输入的 P 值。您知道一种方法可以轻松地将每个 P 值的 N 值输入到最终的 data.frame 中吗?
  • @SamFenton 有几个答案here 关于如何以编程方式进行。在这种情况下,您也可以只使用final$N_Value &lt;- rep(seq(100,500,50), each=1000),因为每个 N 都有 1000 个值。
  • @SamFenton 实际上我刚刚在我的答案中添加了一个更好的解决方案。我们将列索引添加到内部 for 循环,然后将 N 添加到每一行 P[i, 2] &lt;- N
猜你喜欢
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 2021-12-07
  • 2016-08-21
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多