我有一个 p.value 数据框,每列都有变量名。
我的代码是sapply(pval,p.adjust,method="fdr")
。
此代码返回基于每列调整的qvalue,这意味着p基于每列排名然后调整。
如何对整个数据帧进行fdr
,即p在所有数据中排名?
最佳答案
这可能不是最有效的方法,因为它需要大量转换,但对于小数据帧应该没问题:
示例数据(假设 p 值的数据框):
set.seed(100)
pval <- data.frame(a=runif(100), b=runif(100))
现在为了计算调整后的 p 值,我使用了 magrittr
包,只是为了让它更容易阅读。您基本上可以使用嵌套函数:
library(magrittr)
pval %>%
as.matrix %>%
as.vector %>%
p.adjust(method='fdr') %>%
matrix(ncol=2)
基本上,通过上面的代码,您可以将 data.frame 转换为矩阵,然后转换为向量,然后根据所有值调整 p 值,然后重新构建矩阵。
上面的代码可以用 base R 写成:
matrix(p.adjust(as.vector(as.matrix(pval)), method='fdr'),ncol=2)
关于r - p.adjust 尊重整个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32934521/