【问题标题】:Add dataframe to a nested list in a nested for-loop, as in: listname[[xx]][yy] <- value将数据框添加到嵌套 for 循环中的嵌套列表中,如:listname[[xx]][yy] <- value
【发布时间】:2020-12-29 12:47:59
【问题描述】:

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

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

   }

}

但是,我收到警告消息:

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

...因此,只有my_df$aalistname[[xx]][yy] 中,而不是my_df$bb

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

谢谢!

编辑:找到解决方案! 事实证明,唯一的错误是缺少另一个括号。应该是listname[[xx]][[yy]] &lt;- my_df。感谢 cmets 中的 Ben;现在可以了。

【问题讨论】:

  • 您的意思是listname[[xx]][[yy]] &lt;- my_df 用双括号表示yy
  • 哦,我的 - 我很惭愧,但你是对的,本。你想把它写成答案让我“接受”吗?

标签: r dataframe for-loop nested-lists


【解决方案1】:

在存储数据帧时,您需要使用双括号 [[yy,如下所示:

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

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

要查看差异,请查看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 替换列表中的单个值时,您将需要使用 [[

【讨论】:

    【解决方案2】:

    您可以尝试使用replicate 来获取此类嵌套的数据框列表。

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

    【讨论】:

      猜你喜欢
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 2019-04-03
      • 2021-01-27
      相关资源
      最近更新 更多