Почему `as.factor` не работает при применении функции`apply` в R?
Интересно, почему as.factor
функция не работает при применении через apply
функция в R
?
> df.nrow <- 10
> df <- data.frame(col1=sample(c("a","b","c"), df.nrow, TRUE),
+ col2=sample(c("d","e","f"), df.nrow, TRUE),
+ col3=sample(c("g","h","i"), df.nrow, TRUE))
> apply(df, 2, is.factor)
col1 col2 col3
FALSE FALSE FALSE
> df <- apply(df, 2, as.factor)
> apply(df, 2, is.factor)
col1 col2 col3
FALSE FALSE FALSE
1 ответ
Решение
Я думаю, это из-за того, как apply
упрощает результат, чтобы вернуть матрицу. От ?apply
:
If ‘X’ is not an array but an object of a class with a non-null
‘dim’ value (such as a data frame), ‘apply’ attempts to coerce it
to an array via ‘as.matrix’ if it is two-dimensional (e.g., a data
frame) or via ‘as.array’.
На самом деле ваш оригинальный кадр данных, как вы хотите. Пытаться str(df)
или же sapply(df, is.factor)
чтобы проверить это. В основном векторы символов всегда приводятся к факторам, если только stringsAsFactors=FALSE
,