为什么 mtcars[, -c("mpg"), drop = F] 不起作用?

bir*_*ird 1 r dataframe

这有效:

mtcars[, c("mpg"), drop = F]

                     mpg
Mazda RX4           21.0
Mazda RX4 Wag       21.0
Datsun 710          22.8
Hornet 4 Drive      21.4
Hornet Sportabout   18.7
Valiant             18.1
Duster 360          14.3
Merc 240D           24.4
Merc 230            22.8
Merc 280            19.2
Merc 280C           17.8
Merc 450SE          16.4
Merc 450SL          17.3
Merc 450SLC         15.2
Cadillac Fleetwood  10.4
Lincoln Continental 10.4
Chrysler Imperial   14.7
Fiat 128            32.4
Honda Civic         30.4
Toyota Corolla      33.9
Toyota Corona       21.5
Dodge Challenger    15.5
AMC Javelin         15.2
Camaro Z28          13.3
Pontiac Firebird    19.2
Fiat X1-9           27.3
Porsche 914-2       26.0
Lotus Europa        30.4
Ford Pantera L      15.8
Ferrari Dino        19.7
Maserati Bora       15.0
Volvo 142E          21.4
Run Code Online (Sandbox Code Playgroud)

但这并不:

mtcars[, -c("mpg"), drop = F]

Error in -c("mpg") : invalid argument to unary operator
Run Code Online (Sandbox Code Playgroud)

Gre*_*gor 5

你不能将字符串设置为负数。-"mpg"导致错误。(-是一个一元运算符,因为它只接受一个参数。-x尝试取x负数,但x必须是数字,否则您会收到此错误。有一些函数允许您-在列名上使用,例如base::subsetand dplyr::select,但它们只由于在引擎盖下进行了特殊处理而工作。)

如果您想从原始数据中删除该列,分配NULL效果很好:

mtcars[["mpg"]] <- NULL
Run Code Online (Sandbox Code Playgroud)

要复制没有列的数据,setdiff建议是好的:

mtcars[, setdiff(names(mtcars), "mpg"), drop = FALSE]
Run Code Online (Sandbox Code Playgroud)