将循环输出存储在 R 中的数据帧中

ija*_*med 4 loops for-loop r

我想知道如何将完整循环输出的值存储到 R 中的单个数据帧中。例如,

for(i in unique(x$id)){
    .
    .
    .
    y=output of one iteration}
Run Code Online (Sandbox Code Playgroud)

在每次迭代结束时,我都会在 y 中获得输出。但我想将所有迭代的输出存储到 y 中。我如何在 R 中做到这一点?

小智 15

你可以简单地做到这一点

y  <- NULL;
for (i in unique(x$id))
 { 
  tmp <- [output of one iteration]
  y <- rbind(y, tmp)
 }
Run Code Online (Sandbox Code Playgroud)

  • 不要在循环中增长对象。它很慢。预先分配到您需要的尺寸! (2认同)
  • 你是什​​么意思?您能否说明这里需要修复哪些问题才能使代码运行得更快?@罗兰 (2认同)

cr1*_*ade 5

您可以以 y 作为空开始data.frame,如:y <- data.frame()。然后在每次迭代结束时将行绑定到此 data.frame,如下所示y <- rbind.data.frame(y, [output of one interation])lapply但您也可以通过将其包裹在and中来使其更紧凑,do.call如下所示:

y <- do.call(rbind.data.frame,
             lapply(unique(x$id),
                    function(i){
       ...;
       return([output of one iteration])}))
Run Code Online (Sandbox Code Playgroud)