r - p.adjust 尊重整个数据框

标签 r

我有一个 p.value 数据框,每列都有变量名。

enter image description here

我的代码是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/

相关文章:

r - 带注释的 geom_bar 条形内与 x 轴对齐

r - 使用管道 %>% 在 R 中创建日期序列

r - 数据对象是否持久存在于 openCPU 的 R session 中?

r - 按位置数量分组

R purrr:::pmap:如何按名称引用输入参数?

r - 如何对 R 中矩阵的每一行重复计算?

r - 绘图问题 - 图例栏比例、中断、图例、小数

r - 过滤包含特定字符串的行

c - 如何从 R 调用 dpois_raw C 统计例程

r - 为什么这个循环的时间复杂度是非线性的?