我有一个关于如何将列表写入文件的相当基本的问题。 我有一个由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的建议,但我总是只得到所有变量的单个列表,而不指示它们属于哪个子列表。
谢谢!
答案 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