設定不可能な関数の例は ですlabels
。 関数を使用して作成された場合にのみ、因子ラベルを設定できます。 関数factor()
はありませんlabels<-
。因子の「ラベル」と「レベル」に意味があるわけではありません...
> fac <- factor(1:3, labels=c("one", "two", "three"))
> fac
[1] one two three
Levels: one two three
> labels(fac)
[1] "1" "2" "3"
わかりました。ラベルを要求しました。これは、factor 呼び出しによって設定されたものと想定されますが、取得される結果は、まったく... 何と言うか、直感に反するものでしょうか。
> levels(fac)
[1] "one" "two" "three"
つまり、ラベルを設定するということは、実際にはレベルを設定するということのようです。
> fac <- factor(1:3, levels=c("one", "two", "three"))
> levels(fac)
[1] "one" "two" "three"
それは予想通りです。では、レベルを設定するときのラベルとは何でしょうか?
> fac <- factor(1:3, levels=c("one", "two", "three"), labels=c("x","y", "z") )
> labels(fac)
[1] "1" "2" "3"
> levels(fac)
[1] "x" "y" "z"
レベルの指定では、 の「ラベル」引数が「レベル」引数よりも優先されるようです。なぜそうなるのでしょうか。また、で取得されると想像していたものが で返されるのfactor()
はなぜでしょうか。labels()
as.character(as.numeric(fac))
(これは、私が質問に移るように求められた、割り当て関数に関する以前の回答での、関連のないコメントでした。ですから、ここで私に教えていただく機会があります。)
ベストアンサー1
labels
との違いについて考える方法はlevels
(labels()
トミーが回答で説明している関数を無視して)、はlevels
Rに入力()でどの値を探すかx
、結果のオブジェクトのレベルでどの順序を使用するかを伝えることを目的としておりfactor
、labels
は価値観入力後のレベルは係数としてコード化されています... Tommy の回答で示唆されているように、factor
によって返されるオブジェクトにはfactor()
呼び出される部分はありませんlabels
... 引数によって調整されたレベルだけですlabels
... (よくわかりません)。
例えば:
> f <- factor(x=c("a","b","c"),levels=c("c","d","e"))
> f
[1] <NA> <NA> c
Levels: c d e
> str(f)
Factor w/ 3 levels "c","d","e": NA NA 1
の最初の 2 つの要素x
は には見つからなかったのでlevels
、 の最初の 2 つの要素f
は ですNA
。"d"
と"e"
は に含まれるので、には現れなくてもlevels
のレベルで現れます。f
x
現在、以下が含まれますlabels
:
> f <- factor(c("a","b","c"),levels=c("c","d","e"),labels=c("C","D","E"))
> f
[1] <NA> <NA> C
Levels: C D E
R は、因子に何が含まれるべきかを判断した後、レベルを再コード化します。もちろん、これを使用して、次のような頭を悩ませるような作業を行うこともできます。
> f <- factor(c("a","b","c"),levels=c("c","d","e"),labels=c("a","b","c"))
> f
[1] <NA> <NA> a
Levels: a b c
別の考え方としてはlevels
、それはfactor(x,levels=L1,labels=L2)
f <- factor(x,levels=L1)
levels(f) <- L2
この例を適切に言い換えたバージョンは、パット・バーンズのR インフェルノ-- セクション 8.2 には因数パズルがたくさんありますが、この特定のパズルはありません...