のMatrix
パッケージを使用しています。私はベクトルをsparseVectorでインデックス化する
values <- runif(3)
は、今私はindex.map
例えば介さvalues
の要素を抽出したい(通常のベクトル)をルックアップするためにスパーセベクター
index.map <- sparseVector(x=1:3, i=c(10, 33, 50), length=50)
といくつかの値を持っています
values[index.map[33]] # should return values[2]
RはsparseVector
によって数値values
をサブセットする方法を知らないので、私はエラーおそらく
Error in values[index.map[33]] : invalid subscript type 'S4'
を取得します。 私が検索を行うために整数にindex.map
を強制することができます
values[as(index.map[33], 'integer')] == values[2] # TRUE
が、これは、このような簡単な操作のためにかなり冗長である、と私は強制私はindex.map
を使用するたびに行うようになってきました - 私はしませんよこれがいかに効率的であるか確かめてください
このインデックス作成を行う別の方法はありますか?またはこれは唯一のオプションですか?
私は多分スパーセベクターにvalues
を変換することはおそらく行列のパッケージは、別のスパーセベクターでスパーセベクターをサブセットする方法を知っているだろうが、それはないとして、役立つかもしれないと思った:
as(values, 'sparseVector')[index.map[33]]
# Error in as(values, "sparseVector")[index.map[33]] :
# object of type 'S4' is not subsettable
更新@x
(ありがとう@AleksandrVoitov!)は常に動作していないようです。予想通りas(.., 'integer')
index.map[c(10, 10, 33)]
の作品を使用しながら、例えば
values[index.map[c(10, 10, 33)]@x]
は、values[c(1, 2, 1)]
いうよりvalues[c(1, 1, 2)]
を返しています。おそらく@x
は、sparseVectorとやりとりするための「パブリック」な方法ではありませんか?
を与えるだろう!ありがとう。何年も前にRを使っていたにもかかわらず、私はまだS4を正しく理解していません... –
本当です。 S4は日常生活では珍しいことです。 –
おっと、ハングアップします。解決策は必ずしも機能しません。 'values [c(1、1、2)] 'ではなく、' values [index.map [c(10、10、33)] @ x] 'は' values [c(1、2、 。 'values [as(index.map [c(10、10、33)]、 'integer')]'は期待どおりに動作します。 '@ x'は公式にサポートされていますか? –