Первый - вот несколько способов достичь того, чего вы пытаетесь достичь:
data$sulfate
getElement(data, "sulfate")
Далее короткое объяснение, почему data[[colnames(data)=="sulfate"]]
не работает.
1) Выражение в [[
равно colnames(data)=="sulfate"
, что является логическим вектором.
2) Функция [[
принимает один элемент (поскольку он используется для выбора одного элемента) или числовой вектор, и в этом случае он используется для выбора элементов вложенного списка. Например:
a <- list(list(2,3), list(3,4))
> a[[c(2,1)]]
[1] 3
Страница справки help (`[[`) будет иметь больше информации о том, как она работает.
3) Объект data.frame
в R является списком, вы можете подтвердить это, выполнив is.list(data)
. Так что функция [[
работает так же.
Теперь, что происходит, когда вы передаете ему вектор вместо одного числа - оно превращается в числовое представление 0 и 1. Например, проверьте as.numeric(colnames(data)=="sulfate"))
.
Тогда подмножество [[
встречает 0 записей, и когда вы пытаетесь установить подмножество, используя 0, оно выдает ошибку, что вы пытаетесь выбрать менее одного элемента.
data[[0]]
Обратите внимание, что ошибка такая же, как и при data[[colnames(data)=="sulfate"]]