3

是否可以像这样对 ExpressionSet 进行子集化:

SUB=ESet[,ESet@phenoData@data$x==c(0,1)]

X 中的值是 0-9,我只想要 x=0 或 x=1 时的条目。

4

1 回答 1

3

尝试以下操作:

SUB=ESet[, ESet$x %in% c(0,1)]

乍一看,和之间的区别==似乎%in%很微妙。

x <- 0:9

x[x==c(0, 1)]
[1] 0 1

> x[x %in% c(0, 1)]
[1] 0 1

%in%永远不会回来NA,这可能是有用的,甚至是必不可少的,这取决于你想做什么。在以下构造示例中,==返回NA, while%in%返回预期结果:

x <- c(NA, 0:9)

x[x==c(0, 1)]
[1] NA

x[x %in% c(0, 1)]
[1] 0 1

但区别远不止于此。从帮助文件?==很明显,当在长度不等的向量之间进行二进制比较时,较短向量的元素会根据需要循环使用。

试试下面的例子:

x <- 0:9
x[x==c(1, 2)]
integer(0)

这会导致一个空向量。如果你循环使用向量 c(1, 2),很快就会明白为什么:

x:       0 1 2 3 4 5 6 7 8 9
c(1, 2): 1 2 1 2 1 2 1 2 1 2
'==':    F F F F F F F F F F
于 2011-04-21T13:02:21.023 回答