我得到了几个 data.frames 的列表,我想从每个 data.frames 中删除前 2 列。我是按如下方式进行的,但觉得这可能更 R-ish。
data(mtcars)
data(iris)
myList <- list(A = mtcars, B = iris)
# helper function
removeCols <- function(df,vec) {
res <- df[,-vec]
}
lapply(myList,removeCols,1:2)
显然这可以完成工作,但对我来说,我似乎在这里错过了一些东西(例如在 lapply 中使用运算符,因为它在技术上也是一个函数)。 但是,这种方法的主要缺点是您需要一个小辅助函数来处理您想要对该列表的所有元素执行的每个小任务。
最佳答案
您的代码是非常好的 R。但是您有两种选择:
- 使用匿名函数 - 这是一个通用解决方案
- 使用
[
运算符 - 特定于这种情况
您的原件:
xx <- lapply(myList,removeCols,1:2)
匿名函数:
yy <- lapply(myList, function(df, vec){df[,-vec]}, 1:2)
使用 [
运算符:
zz <- lapply(myList, "[", -(1:2))
这些产生相同的结果
identical(xx, yy)
[1] TRUE
identical(xx, zz)
[1] TRUE
关于r - 如何对 data.frames 列表进行索引(子集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11879873/