¿Cómo puedo obtener un marco de datos con columnas eliminadas temporalmente por nombre?

Por ejemplo, con el conjunto de datosmtcars

mtcars[ , "cyl"]

y

mtcars[ , 2]

ambos me dan la misma columna. Entonces, como puedo obtener todo PERO la columna 2 así:

mtcars[ , -2]

No espero esto:

mtcars[ , -"cyl"]
Error in -"cyl" : invalid argument to unary operator

en cambio, lo mejor que se me ocurre es esto:

mtcars[ , !colnames(mtcars)=="cyl"]

¿Hay una solución más fácil?

EDITAR: Parece lógico que si las dos primeras técnicas funcionan, las dos últimas técnicas también deberían funcionar. Esperaba estar perdiendo algo. Las páginas de ayuda para?"[" o?subset No explique este resultado contraintuitivo. Alguien sabe por qué es esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta