2014-01-14 8 views
5

は、私がデータフレームは、私はis.factor()は、ちょうど私にTRUEを与えたworktpにFALSEだなぜ私はRのデータフレームでapply()が動作しないのはなぜですか?

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

を使用するまで

> 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()関数が自分のデータフレームで動作する必要があります。関連する他の関数を適用する必要がありますか?

ありがとうございます!

答えて

6

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 

またはsapply

sapply(d, is.factor) 
    num fac 
FALSE TRUE 
を使用することができます欲しいものを手に入れます
関連する問題