是否可以像这样对 ExpressionSet 进行子集化:
SUB=ESet[,ESet@phenoData@data$x==c(0,1)]
X 中的值是 0-9,我只想要 x=0 或 x=1 时的条目。
是否可以像这样对 ExpressionSet 进行子集化:
SUB=ESet[,ESet@phenoData@data$x==c(0,1)]
X 中的值是 0-9,我只想要 x=0 或 x=1 时的条目。
尝试以下操作:
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