2016-09-01 5 views
20

おそらくダムの質問ですが、最近Matt Dowleがas.factor()というコードを書いていました。具体的にはのコメントにthis answerです。私はこのスニペットを使用しましたが、因子レベルを明示的に設定する必要があったので、as.factor(dt[[col]])factor(dt[[col]], levels=my_levels)に変更しなければなりませんでした。これは私に、と比較してas.factor()を使用する利点(もしあれば)を考えているのですか?なぜ単にfactor()の代わりにas.factor()を使うのですか

+4

名前の整合性は大きなものです。ほとんどすべての共通クラスには 'as.class'関数があります。 – Gregor

答えて

21

as.factorfactorのラッパーですが、入力ベクトルがすでに要因である場合には、クイックリターンを可能にする:@Frankパー

function (x) 
{ 
    if (is.factor(x)) 
     x 
    else if (!is.object(x) && is.integer(x)) { 
     levels <- sort(unique.default(x)) 
     f <- match(x, levels) 
     levels(f) <- as.character(levels) 
     if (!is.null(nx <- names(x))) 
     names(f) <- nx 
     class(f) <- "factor" 
     f 
    } 
else factor(x) 
} 

:ここに明白なことを述べると、しかし:それは単なるラッパーではありませんfactor()はそうではありませんが、この「クイックリターン」は要因レベルと順序性を残します。

f = factor("a", levels=c("a","b")) 
#[1] a 
#Levels: a b 

factor(f) 
#[1] a 
#Levels: a 

as.factor(f) 
#[1] a 
#Levels: a b 
関連する問題