35

私は行列gを持っています:

> g[1:5,1:5]
        rs7510853 rs10154488 rs12159982 rs2844887 rs2844888
NA06985 "CC"      "CC"       "CC"       "CC"      "CC"     
NA06991 "CC"      "CC"       "CC"       "CC"      "CC"     
NA06993 "CC"      "CC"       "CC"       "CC"      "CC"     
NA06994 "CC"      "CC"       "CC"       "CC"      "CC"     
NA07000 "CC"      "CC"       "CC"       "CC"      "CC"     
> rownames(g)[1:2]->remove
> remove
[1] "NA06985" "NA06991"
> g[-remove,]

-removeのエラー:単項演算子への引数が無効です

ここでやりたいことを行う簡単な方法はありますか(ベクトル'remove'で参照されているIDを行列gから削除しますか?

注:これは私が実際にやりたいことの単なるモデルです。ただやるとは言わないでくださいg[-(1:2), ]。ID-dを持つ行全体を削除できる必要があります。

4

3 に答える 3

69

インデックスを使用する場合、「負の」文字ベクトルを使用することはできません。%in%で論理に変換できます

g[!rownames(g) %in% remove, ]  # ! is logical negation

本当にネガティブインデックスを使用したい場合は、次のようにすることができます。

g[-which(rownames(g) %in% remove), ] #which converts to numeric, so minus sign OK

...ただし、ターゲットベクトルに行名がない場合に発生する、厄介な潜在的な誤った結果があります。結果として、値が返されない場合があります。

于 2011-09-27T22:11:35.817 に答える
7

インデックスを作成するときに、文字ベクトルに負のインデックスを付けることはできません。ベクトルremoveをブール値に変換します。関数を定義しました

`%notin%` <- function(x,y) !(x %in% y) 

その後、そのように使用することができます:g[rownames(g) %notin% remove ,]

于 2011-09-27T22:17:40.120 に答える
5

私は「setdiff」を次のように使用します。

g[setdiff(rownames(g),remove),]
于 2017-05-29T11:53:43.763 に答える