我认为这是一个简单的问题,尽管我的搜索工作毫无结果 -
给定的
z=data.frame(X.39=rnorm(20),X.40=rnorm(20),X.51=rnorm(20))
子集化操作
z[,c('X.39','X.51')]
的工作原理。但是
z[,-c('X.39','X.51')]
给了我
Error in -c("X.39", "X.51") : invalid argument to unary operator
为什么会这样,如何使用列名列表删除一组列?
修改
我知道我总是可以使用
z[,!names(z) %in% c('X.39','X.51')]
但我正在寻找更懒惰的解决方案
EDIT2
大多数讨论都在评论部分,但为了良好的顺序关闭这个,其中的要点是一个更懒惰的解决方案(通过名称直接引用)是不可能的。这似乎是在设计中的。
答案 0 :(得分:2)
你可以使用setdiff函数,但我不能说它是否是最优雅的解决方案:
z[, setdiff(names(z), c('X.39','X.51'))]