使用plyr
的llply
优于lapply
的优点是它保留了列表名称。有关说明,请参阅?llply
。我喜欢这个功能,但似乎无法让它在嵌套列表的情况下工作。例如:如何在使用嵌套列表时如何保留列表名称?
library(plyr)
m <- as.list(1:2)
names(m) <- c('M1', 'M2')
foo <- list(m, m)
names(foo) <- paste0("R", 1:2)
result <- ldply(foo, function(x){
ldply(x, function(z) { data.frame(a=z, b= z^2)})
})
> result
.id a b
1 M1 1 1
2 M2 2 4
3 M1 1 1
4 M2 2 4
# if I don't operate on the inner list, I can preserve the outer list's names
result2 <- ldply(foo, function(x){
data.frame(a = x[[1]], b = x[[1]]^2)
})
> result2
.id a b
1 R1 1 1
2 R2 1 1
注意result
不含R1
和R2
(这将被添加作为.id
如果我没有的foo
各元素中嵌套列表上操作,就与result2
的情况下)。我如何确保在嵌套列表上工作时添加外部列表名称?
注:我知道,我能解决这个事后(如读取FOO的名称和复制每一个由子列表的长度,并补充说,作为一个新列)。但我希望能够理解为什么我不能按照设计运行。 – Maiasaura