【问题标题】:Subset of ESet /dividing ESetESet 的子集/除 ESet
【发布时间】:2011-08-10 07:20:22
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您在控制台中输入它并获得正确的结果,这是可能的。否则不是。
  • 啊,你为什么要这样访问 ESet?使用 ESet$x。

标签: r statistics expression bioconductor


【解决方案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,而 %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

【讨论】:

  • 非常感谢 "==" 和 "%in%" 有什么区别?
  • @Azil : == 按元素进行比较,而 %in% 告诉您是否可以在左侧找到匹配项,或者在右侧找到匹配项。比较 1:2 == 4:11:2 %in% 4:1。更多解释请参见help(Comparison)help(match)
  • @Azil 我已经扩展了我的答案来解释差异。
猜你喜欢
  • 2011-08-17
  • 1970-01-01
  • 2011-01-12
  • 2012-10-21
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 2016-03-19
相关资源
最近更新 更多