【发布时间】:2021-09-13 21:01:53
【问题描述】:
我正在尝试通过数据框的每一列循环 TukeyHSD 测试并比较治疗水平。这是一些模拟数据,是我拥有的数据的简化版本(我的数据有大约 350 列):
df1 <- data.frame(cmpd1 = c(500,436,1,1,1,1),
cmpd2 = c(1,1,1,1,1,253),
cmpd3 = c(1,1,300,57,150,260),
treatment=c("W","W","A","A","D","D"))
我已成功遵循 this post 中的建议,并创建了一个循环,对每一列运行 ANOVA,仅输出 p 值
# specific compound differences
for (i in 1:3){
column <- names(df1[i])
anova <- broom::tidy(aov(df1[,i] ~ treatment, data = df1))
# only want aov with P < 0.07 printed
if(anova$p.value[1] < 0.07) {
print(column)
print(anova)
}
}
但是,我想以类似的方式在所有列上运行 TukeyHSD 测试,对于任何给定的处理比较,只输出 p 值
for (i in 1:3){
column <- names(df1[i])
anova <- aov(df1[,i] ~ treatment, data = df1)
tukey <- TukeyHSD(anova)
# only want tukey with P < 0.07 printed
if(tukey[["p adj"]] < 0.07) {
print(column)
print(tukey)
}
}
我想不出正确的方法让它只输出包含 p 值
$cmpd1
diff lwr upr p adj
D-A 2.728484e-12 -29169.59 29169.59 1.0000000
W-A 3.637979e-12 -32278.10 32278.10 0.0001
W-D 1.484573e+04 -13620.88 43312.34 0.056
【问题讨论】: