【发布时间】:2017-06-30 19:09:34
【问题描述】:
我有几个名称相似的列表,例如“dist124”、“dist131”等。将这些列表/数组绑定到一个数据框中时遇到问题。我的代码是这样的:
id <- c(124,131,137,198)
# create the dataframe with nrow as an initial size only for test
# and ncols as the max length of my lists
df <- data.frame(matrix(NA, nrow = 4, ncol = 33))
row.names(df) <- id
a = 1
for(i in id){
df[a,] <- do.call(rbind, lapply( paste("dist",i, sep=""), get))
a <- a+1}
然后我收到此错误消息:
[<-.data.frame(*tmp*, a, , value = c(82.4416264694195, 505.003082621159, : 替换有 5 个项目,需要 33 个) 中的错误
我知道这是因为我的列表长度不同,所以为了解决这个问题,我想一次更改所有列表的长度(因为它们超过 200 个列表)。
但我找不到将这些列表的最大长度放入循环的解决方案。
我在这里找到了不等长列表的解决方案:
adding NA to make all list elements equal length
所以我试着让它适应我的情况,像这样:
b <- 1
for(i in id){
assign()
n[b] <- length(paste("dist",i, sep=""))
lapply(paste("dist",i, sep=""), `length<-`, n)
b <- b+1}
如果我运行 length(dist124) = length(dist198),例如,我可以使它们相等,但我正在寻找一个循环解决方案,因为我有很多列表来更新它的长度。
【问题讨论】:
-
为什么要将不同的列表整合成一个
data.frame? -
因为我需要进行一些计算并将它们导出到一个唯一的文件中。 lmo 的解决方案对我来说效果很好。谢谢:)