1

我想这很容易,尽管我的搜索毫无结果——

给定

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')]

但我正在寻找一个更懒惰的解决方案

编辑2

大多数讨论都在评论部分,但为了保持良好的秩序而关闭它,其要点是不可能使用更懒惰的解决方案(按名称直接引用)。这似乎是设计的。

4

1 回答 1

2

您可以使用 setdiff 函数,但我不能说它是否是最优雅的解决方案:

z[, setdiff(names(z), c('X.39','X.51'))]
于 2013-04-08T06:19:43.080 回答