将列表列表写入表中,每个列表的名称是否为列?

时间:2011-09-01 11:13:26

标签: list r

我有一个关于如何将列表写入文件的相当基本的问题。 我有一个由Mfuzz acore函数生成的列表,它按以下格式列出了我在20个集群中的每个集群中的所有探测器的名称:

[[1]]
         NAME  MEM.SHIP
ILMN_X ILMN_X 0.9993195

.
.
.
[[20]]
         NAME  MEM.SHIP
ILMN_Y ILMN_Y 0.9982345

我想将其转换为数据框并最终转换为输出文件,其中列表编号作为列包含在内;

像这样:

CLUSTER NAME    MEM.SHIP
      1 ILMN_X 0.9993196
      .
      .
      .
     20 ILMN_Y 0.9982345

CLUSTER列指示探针属于哪个子列表。每个探测名称都可以属于多个子列表。 我尝试了其他帖子中的其他建议,例如使用plyr的建议,但我总是只得到所有变量的单个列表,而不指示它们属于哪个子列表。

谢谢!

2 个答案:

答案 0 :(得分:6)

如果您的原始列表名为clstrs,我相信这是一个解决方案:

do.call(rbind, lapply(seq_along(clstrs), function(i){
  data.frame(CLUSTER=i, clstrs[[i]])
}))

答案 1 :(得分:4)

这是另一种如何给猫皮肤的方法。

# make some sample data
my.df <- data.frame(num = 1:10, val = runif(10))
my.list <- list(my.df, my.df, my.df, my.df, my.df, my.df)
# build index - count the number of rows in each list element that will be 
# used to designate the rows based on their previous list affiliation
index <- lapply(my.list, nrow)
index <- rep(1:length(index), times = index)
# from here on it's basically what Nick did. rbind everything together and
# put some lipstick on and voila
my.out <- do.call("rbind", my.list)
my.out$index <- index
#or
my.out <- cbind(my.out, index)

我有几分钟的时间,所以我为每个数据框使用10e5行进行了快速基准测试。

我的解决方案$index

   user  system elapsed 
   0.81    0.27    1.08

cbind的解决方案:

   user  system elapsed 
  19.92    0.42   20.38 

尼克的解决方案:

   user  system elapsed 
   1.04    0.26    1.31