【问题标题】:In R, how can I use all methods of p.adjust on a dataframe in one go?在 R 中,如何一次性在数据帧上使用 p.adjust 的所有方法?
【发布时间】:2020-09-03 19:43:05
【问题描述】:

目前我有一个 p 值的数据框。

l<- data.frame(p1 = c(0.01,0.5,0.6), p2= c(0.04,0.9,0.02))

我想独立于其他列使用每列上的所有方法来应用p.adjust

下面是唯一可行的方法……但一次只能用于一列。

library(multcomp)
set.seed(2020)

l<- data.frame(p1 = c(0.01,0.5,0.6), p2= c(0.04,0.9,0.02))
p.adjust.M<- p.adjust.methods
sapply(p.adjust.M, function(meth) p.adjust( l[,1], meth))
`p.adjust.M<- p.adjust.methods`

下面的输出是第一列。理想情况下,我希望将以下所有方法一次性应用于所有列,并拥有与 n 列调整相对应的 n 数据框。

     holm hochberg hommel bonferroni   BH    BY  fdr none
[1,] 0.03     0.03   0.03       0.03 0.03 0.055 0.03 0.01
[2,] 1.00     0.60   0.60       1.00 0.60 1.000 0.60 0.50
[3,] 1.00     0.60   0.60       1.00 0.60 1.000 0.60 0.60

不幸的是,我将有很多列,所以这不是一个可行的方法。

提前致谢!

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
  • 谢谢,刚刚进行了澄清。

标签: r dataframe apply


【解决方案1】:

您可以将整个 sapply() 函数包装在一个 lapply() 函数中,其中数据(第一个参数)是您的数据集,如下所示:

lapply(l, function(L)sapply(p.adjust.M, function(meth) p.adjust( L, meth)))
# $p1
# holm hochberg hommel bonferroni   BH    BY  fdr none
# [1,] 0.03     0.03   0.03       0.03 0.03 0.055 0.03 0.01
# [2,] 1.00     0.60   0.60       1.00 0.60 1.000 0.60 0.50
# [3,] 1.00     0.60   0.60       1.00 0.60 1.000 0.60 0.60
# 
# $p2
# holm hochberg hommel bonferroni   BH   BY  fdr none
# [1,] 0.08     0.08   0.08       0.12 0.06 0.11 0.06 0.04
# [2,] 0.90     0.90   0.90       1.00 0.90 1.00 0.90 0.90
# [3,] 0.06     0.06   0.06       0.06 0.06 0.11 0.06 0.02

【讨论】:

  • 非常感谢!这行得通。你能解释一下为什么只对数据使用 sapply 不起作用,以及这里的区别吗?
  • 因为你有两组你想要循环的东西——不同的方法和不同的数据列。
猜你喜欢
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多