我正在尝试添加使用数据集包装子列表的列表名称作为最后一个列,以允许我之后调用 rbind 并加入所有数据集。换句话说,要加入数据集,我需要保留原始列表名称以供参考。我用 for 完成了它,但我想知道是否可以使用 purrr 方法或应用函数,因为我的数据比下面的要复杂得多。为了说明我的意思,我分享一个简单的例子:
x1 <- data.frame(a = 1:3, b = letters[1:3])
x2 <- data.frame(a = 4:6, b = letters[4:6])
y1 <- data.frame(a = 10:15, b = letters[10:15])
y2 <- data.frame(a = 13:17, b = letters[13:17])
l1 <- list(x1, y1)
l2 <- list(x2, y2)
l <- list(l1, l2)
nm <- c("list1", "list2")
names(l) <- nm
lmod <- l
for (i in 1:length(lengths(l))) {
for(j in 1:length(l[[i]])) {
lmod[[i]][[j]]$nm = names(l[i])
}
}
使用 lapply 我尝试了类似的东西:
lmod <- lapply(l, function(x) {
x[[1]] <- names(x)
x[[2]] <- names(x)
return(x)
})
但它根本没有用。
有人知道这个吗?
Map(lapply, l, list(cbind), nm=names(l))
这也可以写成:
Map(\(x, y)lapply(x, cbind, nm = y),l, names(l))
all.equal(lmod, Map(lapply, l, list(cbind), nm=names(l)))
[1] TRUE
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句