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

如何在data.frames列表上索引(子集),r,list,dataframe,lapply,R,List,Dataframe,Lapply,我得到了几个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) 数据(mtcars) 数据

我得到了几个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)
数据(mtcars)
数据(iris)

myList目前我唯一能想到的是将它变短并去掉helper函数

data(mtcars)
data(iris)
myList <- list(A = mtcars, B = iris)
lapply(myList,function(x) x[,-(1:2)])

但是,由于列表是一个非常开放的结构,对其内容没有任何要求,所以不能对其内容进行索引,因为它们可能真的不同。但是,如果两个数据集具有相同的维度(nxm),则可以将它们组合到一个3d数组中,所有已知的索引技巧都可以在该数组中工作。

您的代码非常好。但您有两个可选选项:

  • 使用匿名函数-这是一个通用的解决方案
  • 使用本例特有的
    [
    运算符
  • 您的原件:

    xx <- lapply(myList,removeCols,1:2)
    
    这些结果相同

    identical(xx, yy)
    [1] TRUE
    
    identical(xx, zz)
    [1] TRUE
    

    +1,谢谢Andrie,你的第二个选项就是我要找的。我以前试过
    “[[[”
    ”的时候,实际上已经很接近了。@hans0l0我很高兴能帮上忙。请记住
    [[
    只返回一个元素。所以它有它的位置,但在这种情况下不是这样的!
    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