Почему apply() не работает с моим фреймом данных в R?

У меня есть фрейм данных с именем «взрослый».

> str(adult[, 1:2)
'data.frame':   32561 obs. of  15 variables:
 $ age      : int  39 50 38 53 28 37 49 52 31 42 ...
 $ worktp   : Factor w/ 9 levels " ?"," Federal-gov",..: 8 7 5 5 5 5 5 7 5 5 ...

> is.factor(adult[,1])
[1] FALSE

> is.factor(adult[,2])
[1] TRUE

Все работает хорошо, пока я не использую

> apply(adult[,1:2], 2, function(x) is.factor(x))
age worktp 
FALSE  FALSE 

Почему я получил FALSE на worktp, где is.factor() только что дал мне TRUE? Мне действительно нужна эта функция apply() для работы с моим фреймворком данных. Должен ли я использовать некоторые другие функции, связанные с применением?

Спасибо!


person wen    schedule 14.01.2014    source источник


Ответы (1)


apply преобразует ваши данные в матрицу перед их обработкой (см. раздел «Подробности» в ?apply). На этом этапе информация о факторе теряется.

d <- data.frame(num=1:4, fac=factor(1:4))
d[, 2]
[1] 1 2 3 4
Levels: 1 2 3 4        # levels, hence a factor

m <- as.matrix(d)
m[, 2]
[1] "1" "2" "3" "4"     # no levels anymore

apply(d, 2, is.factor)

  num   fac 
FALSE FALSE             # no factors as converted to matrix

Чтобы получить то, что вы хотите, вы можете использовать lapply

lapply(d, is.factor)
$num
[1] FALSE

$fac
[1] TRUE

or sapply

sapply(d, is.factor)
  num   fac 
FALSE  TRUE 
person Mark Heckmann    schedule 14.01.2014