[Edit:] Объяснение того, почему отрицательные строковые индексы не работают:
-()
- это функция, и разработчики R говорят, что ее нельзя использовать в символьном векторе (и не только потому, что отрицание строки не имеет смысла). Поскольку вы не можете отрицать символьный вектор, вы не можете предоставить отрицательные строки для удаления столбцов. Проблема с -
и является источником сообщения об ошибке, которое вы цитируете. Отсюда правило, что отрицательные индексы работают только для чисел. Источник исходной ошибки:
> -"cyl"
Error in -"cyl" : invalid argument to unary operator
Обратите внимание, что в комментариях к Q было заблуждение, что отрицательная версия "cyl"
была "-cyl"
, но это не просто строка. Приведенный выше фрагмент кода R показывает, что происходило в подмножестве, заданном в Вопросе.
Раздел 2.7 руководства " Введение в R " описывает разрешенные методы поднабора.
[Подлинный текст]
Самый простой способ удалить компонент - просто установить для этого компонента значение NULL
:
> cars <- mtcars
> cars[, "cyl"] <- NULL ## or cars$cyl <- NULL
> names(cars)
[1] "mpg" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb"
[Edit:]
В свете правки для Q, указывающей на временное падение именованного столбца, было необходимо:
subset(mtcars, select = -cyl)
или
mtcars[, !names(mtcars) %in% "cyl"]
варианты, и первый чище, чем последний.