如何在 R 中的 for 循环中的列表中分配列表

How to assign a list within list in a for loop in R

我试图从方法论上找出为什么我的下面的代码不起作用。

formatted_data 是一个包含 20 个不同列的不同数据框的列表。 ff_demog_table 是一个函数,用于格式化 formatted_data 内的数据帧。最后,formatted_tables 应该是保存不同格式数据框的列表。

我想遍历 formatted_data 列表中的每个数据框,然后遍历每个数据框中的每一列。似乎我无法直接将 formatted_tables 分配为 [[i]][[j]] 但如果我只使用 formatted_tables[[i]].

它将显示最后一个格式化的列

例如,如果我尝试运行下面的代码,下标越界。为什么?

a <- list()
a[[1]][[1]] <- 7

但是,如果我 运行 下面的代码将起作用。

b <- list()
b[[1]] <- 7
b[[1]][[1]] <- 8

我无法共享数据,但一个简单的可重现示例只是两个数据框,其中多列保存在一个列表中,其中列由因子组成。

for (i in seq_along(formatted_data)) {
  
  for (j in 1:ncol(formatted_data[[i]])) {
    
    formatted_tables[[i]][[j]] <- ff_demog_table(formatted_data[[i]], colnames(formatted_data[[i]][j]))
    
  }
  
}

简而言之,任何有助于理解 R 的列表索引的帮助都会非常有帮助。谢谢!

我们可以用特定的 length 初始化 list。在下面的代码中,它是长度为 1 的 list 而不是长度为 0 的 listlist()

a <- vector('list', 1)
a[[1]][[1]] <- 7

或者如果我们想从 length 0 列表构造,用 list 包裹在 <-

的右侧
a <- list()
a[1] <- list(list(7))

-输出结构

> str(a)
List of 1
 $ :List of 1
  ..$ : num 7