将数据帧添加到嵌套 for 循环中的嵌套列表,如:listname[[xx]][yy] <- value

Add dataframe to a nested list in a nested for-loop, as in: listname[[xx]][yy] <- value

我有一个嵌套循环,在此期间我想将数据帧添加到列表中,如:

listname <- list()

for(xx in 1:50) {

   listname[[xx]] <- list()

   for(yy in 1:25) {

      my_df <- data.frame(aa = c(1,2,".."), bb = c(1,2,".."))

      listname[[xx]][yy] <- my_df

   }

}

但是,我收到警告消息:

"要替换的项目数不是替换长度的倍数"

... 结果,listname[[xx]][yy] 中只有 my_df$aamy_df$bb 中没有。

用这种方法完成嵌套数据框列表的更合适方法是什么?

谢谢!

编辑:找到解决方案! 事实证明,唯一的错误是缺少进一步的支架。应该是 listname[[xx]][[yy]] <- my_df。感谢 Ben 的评论;现在可以使用了。

您可以尝试使用 replicate 来获取这样的数据帧嵌套列表。

my_df <- data.frame(aa = c(1,2,".."), bb = c(1,2,".."))
listname <- replicate(50, replicate(25, 
                      my_df, simplify = FALSE), simplify = FALSE)

您需要使用双括号 [[ 作为 yy 来存储您的数据框,如下所示:

listname[[xx]][[yy]] <- my_df

在处理列表时使用 [[ 很重要,因为用 [ 对列表进行子集化(单独使用单个括号)总是 returns 一个较小的列表。

要了解差异,请查看 listname[[1]][1]:

[[1]]
  aa bb
1  1  1
2  2  2
3 .. ..

这是一个返回的列表

然后我们可以和listname[[1]][[1]]比较:

  aa bb
1  1  1
2  2  2
3 .. ..

这是一个data.frame.

在这种情况下,当您想要用 data.frame 替换列表中的单个值时,您需要使用 [[.