Почему `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,

Другие вопросы по тегам