我有矩阵 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中的错误:一元运算符的无效参数
有没有一种简单的方法可以做我想做的事情(从矩阵 g 中删除向量'remove'中引用的ID?
注意:这只是我实际想要做的模型,请不要只做g[-(1:2), ]
,我需要能够移除一大堆行我有ID-d。
答案 0 :(得分:57)
使用索引时,不能使用“负”字符向量。您可以使用%in%
转换为逻辑g[!rownames(g) %in% remove, ]
如果您真的想使用否定索引,可以这样做:
g[-which(rownames(g) %in% remove), ]
...然而,当目标向量中没有任何rownames时,它会产生令人讨厌的潜在错误结果。结果可能没有返回值。
答案 1 :(得分:7)
索引时不能对字符向量进行否定索引。将矢量remove
变为布尔值。我已经定义了一个函数
`%notin%` <- function(x,y) !(x %in% y)
然后可以这样使用:g[rownames(g) %notin% remove ,]
答案 2 :(得分:4)
我使用“setdiff”如下:
g[setdiff(rownames(g),remove),]