【发布时间】:2012-01-25 11:23:02
【问题描述】:
我尝试使用 Reduce(intersect,...) 来比较多个 Entrez ID 向量(整数向量)。向量是使用“DISTINCT”从数据库中选择的,因此单个向量不包含重复项。
length(factor(c(l1$entrez)))
给出与
相同的长度(以及相同的 ID,但没有长度函数)length(c(l1$entrez))
当我用
比较多个向量时length(Reduce(intersect,list(c(l1$entrez),c(l2$entrez),c(l3$entrez),c(l4$entrez))))
或
length(Reduce(intersect,list(c(factor(l1$entrez)),c(factor(l2$entrez)),c(factor(l3$entrez)),c(factor(l4$entrez)))))
结果不一样。我知道 factor!=originalVector 但我不明白为什么结果会不同,尽管初始因子/向量的长度和级别是相同的。
有人可以解释 intersect 函数对向量和因子的不同行为吗?是不是两个因子列表的交集又是因子列表,然后重复处理不同?
编辑 - 示例:
> head(l1)
entrez
1 1
2 503538
3 29974
4 87769
5 2
6 144568
> head(l2)
entrez
1 1743
2 1188
3 8915
4 7412
5 51082
6 5538
这些列表包含大约 500 到 20K 个 Entrez ID。所以向量包含纯整数,并且应该给出所有测试向量之间的交集。
> length(Reduce(intersect,list(c(factor(l1$entrez)),c(factor(l2$entrez)),c(factor(l3$entrez)),c(factor(l4$entrez)))))
[1] 514
> length(Reduce(intersect,list(c(l1$entrez),c(l2$entrez),c(l3$entrez),c(l4$entrez))))
[1] 338
> length(Reduce(intersect,list(l1$entrez,l2$entrez,l3$entrez,l4$entrez)))
[1] 494
我不得不深表歉意。 intersect 函数的不同行为可能是由数据问题引起的。我在数据集中找到了包含逗号分隔的 Entrez ID(22038、23207、...)的字段。我应该先更详细地查看数据。感谢您的回答和您的时间。尽管我还不了解不同的结果,但我确信这是导致不同行为的原因。有人可以确认吗?
【问题讨论】:
-
不能为别人说话,但一个可重复的例子会很有帮助。
-
感谢您的评论:我要比较的列表的示例:
-
ID 是因子还是整数变量?如果您从数据库中导入它,并且该数据库将 ID 存储为字符(这是合理的,因为它不是对数值运算有意义的变量),那么它将作为因子导入。
-
在数据库中,Entrez ID 存储为 varchar,但在 R 中,所有 ID 都被识别为整数:> typeof(l1$entrez) [1] "integer"
标签: r