В чем разница в cbind при использовании с индексом по сравнению с именем переменной

Используя набор данных радужной оболочки для этого примера, многие люди это знают.

Я масштабировал первые 4 переменные набора данных и назвал их scaled.iris. standardized.iris <- scale(iris[,-5]) Почему есть разница, привязывать ли я столбец по индексу cbind(scaled.iris,iris[5]) или по имени переменной cbind(scaled.iris,iris$Species)?

Первый дает мне data.frame со столбцом с фактическими метками ("setosa", "versicolor", ...) плюс правильное имя столбца, последний дает мне матрицу без имени столбца плюс символьные значения 1-3 .


person Olivia    schedule 14.05.2020    source источник
comment
Добро пожаловать в SO. Пожалуйста, включите код, который вы использовали для выполнения масштабирования, поскольку это позволяет сообществу понять ваш вопрос с точки зрения кодирования и позволяет проверить и проверить ответ. Полезные ссылки для того, чтобы задать вопрос: Как задать вопрос и минимальный воспроизводимый пример   -  person Peter    schedule 14.05.2020


Ответы (1)


Это связано с классом вызываемого объекта. Это не имеет ничего общего с cbind().

Когда столбец выбирается из фрейма данных с использованием номера столбца, выбранный столбец извлекается как фрейм данных. Если вызывается один столбец, извлеченный объект будет фреймом данных с одним столбцом. Если вызывается более одного столбца, то извлеченный объект будет фреймом данных со всеми вызванными столбцами.

Когда столбец выбирается с использованием имени столбца, выбранный столбец извлекается как вектор без имени. Если вызывается один столбец, извлеченный объект будет одним вектором. Если вызывается более одного столбца, то извлеченный объект будет вектором из числа вызываемых векторов.

Если вы запустите str(), вы сможете найти разницу.

> str(iris[1])
'data.frame':   150 obs. of  1 variable:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...

> str(iris$Sepal.Length)
 num [1:150] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...

Вы могли видеть, что класс первого - data.frame, состоящий из числового вектора, а класс второго - числовой.

person Mohanasundaram    schedule 14.05.2020