如何索引(子集)data.frames列表

Mat*_*ert 3 r list lapply dataframe

我得到了几个data.frames的列表,我想从每个data.frames中删除前两列.我这样做了,但觉得这可能更像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)
Run Code Online (Sandbox Code Playgroud)

显然这可以完成这项工作,但对我来说,似乎我必须在这里遗漏一些东西(例如在lapply中使用运算符,因为它在技术上也是一个函数).但是,这种方法的主要缺点是,对于要对该列表的所有元素执行的每个小任务,都需要一个小辅助函数.

And*_*rie 6

你的代码非常好R.但你有两个选择:

  1. 使用匿名函数 - 这是一个通用的解决方案
  2. 使用[特定于此情况的运算符

你原来的:

xx <- lapply(myList,removeCols,1:2)
Run Code Online (Sandbox Code Playgroud)

匿名函数:

yy <- lapply(myList, function(df, vec){df[,-vec]}, 1:2)
Run Code Online (Sandbox Code Playgroud)

使用[运营商:

zz <- lapply(myList, "[", -(1:2))
Run Code Online (Sandbox Code Playgroud)

这些产生相同的结果

identical(xx, yy)
[1] TRUE

identical(xx, zz)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)