2012-04-25 14 views
0

私は数値ベクトルに変換しようとしている要素RFyhatを持っています。必要に応じて、私はすでにそのRの因子を持つインデックスベクトル

as.numeric(levels(RFyhat))[RFyhat] 

作品を発見した、と私はこのような構成で少し周りプレイしました:

c(1,2,20,4,5,6,7)[RFyhat] 

も働く予想通り(RFyhatは7つのレベルがあります)。

私はこの構造の動作を理解していますが、誰かがこの構文がどのように動作するか、あるいはそれが単なる構文的砂糖であるかどうかを説明できるかどうかは疑問です。具体的には、[RFyhat]はインデックスベクトルとして機能しますか?もしそうであれば、要因として一般的にどのようにインデックスとして使用されますか?

答えて

2

はい、文字やその他の文字ではなく、インデックスに使用すると因子が整数に変換されると思います。

この例を見て

> fac <- factor(letters[c(1,1,2,1,3,3,2,1)]) 
> vec <- c(b=1, a=2, c=3) 
> vec[fac] 
b b a b c c a b 
1 1 2 1 3 3 2 1 

のでfacの要素1は関係なく、名前の異なる順序の、vecの要素1を返しました。

私は個人的にはas.integer(as.character(RFyhat))as.numeric(levels(RFyhat))[...]が好きです。

+0

'as.integer(as.character(RFyhat))'は私が探している振る舞いを持っていますが、 'as.numeric(levels(RFyhat))[RFyhat]'がそれは何をしているのか。だから、RFyhatの各要素は、あたかも「レベルが上がっていない」ように整数に変換されていますか?例えば ​​'c(1,2,20,3,4)[c(2,2,2,2,2,2,2,2,2,2)]'を取ると、20秒の数値ベクトルが返されます。センス。なぜ 'as.numeric(levels(RFyhat))[RFyhat]'は因子ではなく数値ベクトルを返しますか?それはRの特異性ですか?係数は 'c(2,2,2,2,2,2,2,2,2) 'のような数値ベクトルに変換されていますか? – Justin

+1

@ジャスティンあなたが欠けている部分は、要素が整数ベクトル(レベルとともに)であると思います。しかし、それは文字通り整数コードとして格納され、 "ルックアップ"値としてのユニークなレベルだけである。スペースを節約します。 – joran

+1

うん、それはどうなるのか。 getは整数ベクトルに変換された係数を持つ数値ベクトルをサブセット化するので、数値ベクトルを返します。 – Backlin

関連する問題