以下是数据的示例:
metabolite treatment area
x A 1
x B 2
x C 3
y A 4
y B 5
y C 6
z A 7
z B 8
z C 9
x A 12
x B 22
x C 32
y A 42
y B 52
y C 62
z A 72
z B 82
z C 92
对于每种代谢物,我想测试治疗的平均面积是否不同。 换句话说:
代谢物X :A对B,A对C,B对C 代谢物Y :A对B,A对C,B对C 代谢物Z :A对B,A对C,B对C
我需要在R中进行Tukey测试(http://en.wikipedia.org/wiki/Tukey%27s_range_test),这将对治疗进行每次成对比较(A与B,A与C,C与B)。这是我提出的,但它不起作用。
`for (i in levels(data$metabolite)) {
tukey_part1 <- aov(data$area ~ data$treatment)
tukey_part2 <- TukeyHSD(x=tukey_part1, 'data$treatment', conf.level=0.95)
} `
请帮助!
答案 0 :(得分:1)
好吧,您实际上从未尝试过使用正在循环的i
变量。我继续将for
循环改为使用lapply
。这个怎么样
res<-lapply(levels(data$metabolite), function(i) {
met<-data[data$metabolite==i, ] #subset for metabolite i
part1<-with(met, aov(area ~ treatment))
print(part1)
list(
part1 = part1,
part2 = TukeyHSD(x=part1, 'treatment', conf.level=0.95)
)
})
names(res)<-levels(data$metabolite)
这将为您提供一个或多个列表,其中包含您要查找的部分。例如,您可以使用res[[_metabolite_]][[_part_]]
提取结果,例如......
res[["x"]][["part1"]]
res[["y"]][["part2"]]