В R, data.frame()
функция судов с установкой по умолчанию stringsAsFactors=TRUE
. Это означает, что все входные символьные векторы неявно преобразуются в так называемые «факторы» при создании data.frame.
фактор несколько напоминает вектор с целыми числами + текстовые метки, которые описывают эти целые числа. Например, если столбец gender
имеет тип factor
это на самом деле вектор целых чисел 1
с и 2
с плюс прилагается словарь, который идентификатор категории 1
означает Male
и идентификатор категории 2
означает Female
или наоборот.
Эта настройка по умолчанию на stringsAsFactors
является подлым зверем и может появляться в многочисленных неожиданных местах. В большинстве случаев это помогает просто добавить явную опцию stringsAsFactors=FALSE
, чтобы сохранить векторы символов в качестве символьных векторов.
Ниже я перечисляю те функции, которые я лично боролся с до понимая, что все, что я хватает stringsAsFactors=FALSE
вариант:
data.frame
read.csv
, read.table
и другие read.*
функции
expand.grid
В вашем конкретном примере выше, что вы n ПЕД сделать, это найти строку:
means <- data.frame(COL1_VALUES,COL2_VALUES)
и заменить его:
means <- data.frame(COL1_VALUES,COL2_VALUES,
stringsAsFactors=FALSE)
таким образом, что вы явно запрашивающий data.frame()
не делать какие-либо неявное преобразование за спиной.
Вы также можете избежать этого преобразования, изменив глобальный параметр в начале каждого R сессии:
options(stringsAsFactors = FALSE)
Примечания, однако, что изменение этого глобального параметра влияет только на вашу машину и фрагменты кода может остановить работая на машинах других.
Этот answer содержит дополнительную информацию о том, как его постоянно отключать.
'COL1_VALUES' как вектор является символом' character'. Когда он помещается в 'data.frame()', он преобразуется в 'factor' (поскольку' data.frame (..., strAsAsFactors = TRUE) 'по умолчанию). Я думаю, это объясняет вашу разницу. – thelatemail
Я не понимаю, почему вы это делаете в первую очередь. Ваш код делает практически ничего полезного –
@DavidArenburg это 100-кратная упрощенная версия моего фактического кода, чтобы представить пример. – Baykal