微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

字符向量和列表之间的 R 超几何测试,在循环中计算 p 值

如何解决字符向量和列表之间的 R 超几何测试,在循环中计算 p 值

我正在尝试自己编写代码以使用 phyper 在 R 中运行超几何测试。

我有一个上调基因的特征向量:(或者这些是我从骨灰盒中取出的“红色”球)

gene.up <- c("A","B","C","D")

我还有一个包含在我的实验中发现的所有基因的特征向量:(或者这些都是我从骨灰盒中取出的球——“白色”和“红色”)

gene.background <- c("A","D","E","F")

我还有一个包含路径信息的字符列表:(或者每个“路径”都是我从骨灰盒中取出的球的子集,在这种情况下,我的骨灰盒有 5 个白色球和 4 个红色球)

gene.pathway.list <- list("pathwayA" = c("A","F","G"),"pathwayB" = c("A","H"),"pathwayC" = c("D","G","I"))

现在我需要对 gene.pathway.list 中的每个路径运行超几何测试。所以我创建了一个空数据框来存储来自超几何测试的路径名称和 p 值,并创建了一个如下所示的测试循环。

df <- data.frame(pathway=character(length(gene.pathway.list)),pvalue=numeric(length(gene.pathway.list)))

for (i in c(1:length(gene.pathway.list))) {
  df[i,1] <- names(gene.pathway.list[i])
  df[i,2] <- phyper(sum(gene.pathway.list[[i]] == gene.up),length(gene.pathway.list[[i]]),length(unique(unlist(gene.pathway.list))) - length(gene.pathway.list[[i]]),length(gene.background))
}

然而,输出值没有任何意义——例如,我的 pathway C 的 p 值为零,但是如何将 "C""D" 拉出的可能性是零?我想弄清楚出了什么问题,我设置不正确的是什么?

解决方法

我们可以使用 %in% 而不是 ==

for (i in c(1:length(gene.pathway.list))) {
  df[i,1] <- names(gene.pathway.list[i])
  df[i,2] <- phyper(sum(gene.pathway.list[[i]] %in% gene.up),length(gene.pathway.list[[i]]),length(unique(unlist(gene.pathway.list))) - length(gene.pathway.list[[i]]),length(gene.background))
}

-输出

> df
   pathway    pvalue
1 pathwayA 0.1071429
2 pathwayB 0.2142857
3 pathwayC 0.1071429

== 是元素比较运算符。 lhs 和 length 元素的 rhs 不相同,因此较短的长度会回收并产生异常。相反,使用 %in%

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?