R ошибка подмножества data.frame при использовании [[ - PullRequest
0 голосов
/ 09 сентября 2018

Для фрейма данных (данных), который имеет один столбец в виде сульфата, В чем разница между data[["sulfate"]] и data[[colnames(data)=="sulfate"]]?

data["sulfate'] и data[colnames(data)=="sulfate"] дают одинаковый результат и имеют класс фрейма данных, но data[["sulfate"]] приводит к числовому вектору в моем случае, но data[[colnames(data)=="sulfate"]] оказывается ошибкой. Почему?

Picture showing the error.

1 Ответ

0 голосов
/ 09 сентября 2018

Первый - вот несколько способов достичь того, чего вы пытаетесь достичь:

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"]]

...