循环和方差分析

时间:2016-11-10 21:31:03

标签: r

所以我已经在SAS中完成了这个分析,我试图在R中复制它,但我是R的新手,我现在几乎什么都不知道。我尝试了很多东西,但似乎到处都是错误。我会尝试简单的事情,因为我认为如果我可以使它在小范围内工作我可以将它推断到更大的范围。

基本上我有这个庞大的数据集,其主题都具有代谢物的价值。我想对所有这些代谢物进行ANOVA测试,其中有600多种。我想找到他们的P值并将它们全部放入带有Metabolite标签和p值的漂亮表中。以下是数据外观的示例。

Subject #   Treatment  Antibiotic  Metabolite1  Metabolite2.... Metabolite600
MG_1         MD         No           1.257        2.578               5.12
MG_2         MS         1SS          3.59          1.052              1.5201
MG_3         MD1SS      No           1.564         1.7489             1.310
etc...

我知道我可以跑:

fit1 <- aov(Metabolite1 ~ TREATMENT * ANTIBIOTIC, data=data1)

仅为第一个代谢物计算它。我试图做一个For循环只是为了尝试一下。基本上我想知道我是否可以使用AOV功能而无需键入或复制/粘贴它,并为所有内容键入1到600.

在SAS中我可以编写一个宏变量并为其指定一个数字,这样当我创建一个名称时,我可以简单地说Metabolite&amp; i代表y值并且适合&amp; i来保存结果。在R中有没有办法做到这一点?

我尝试用For(我在1:20中)做Metabolite [i],但这不起作用。有没有办法在循环中实际引用i?如果存在,那么正确的语法是什么?

编辑:我真的不知道怎么做比这更简单,我的数据集很大,我现在只有大约3行代码。

library(gdata)

testing = read.xls("~data1", sheet=1)

fit1 <- aov(Metabolite1 ~ TREATMENT * ANTIBIOTIC, data=data1)

summary(fit1)

这就是我所拥有的一切。正如我上面提到的,我尝试过做

For (i in 1:20) {
fit[i] <- aov(Metabolite[i] ~ TREATMENT * ANTIBIOTIC, data=data1)
}

哪个不起作用。它只会说找不到物体代谢物。它完全忽略了我对i值的引用。我只是想从小开始。

1 个答案:

答案 0 :(得分:1)

如果没有数据,很难调试以下代码,但我会尝试以下内容:

library(tidyverse)
library(broom)

data_nested <- data1 %>% gather(key = MetaboliteType, value = Metabolite, 
-Subject, -Treatment, -Antibiotic) 
%>% group_by(MetaboliteType) %>% nest()

aov_fun <- function(df) {
aov(Metabolite ~ Treatment * Antibiotic, data = df)
}

(results <- data_nested %>% mutate(fit = map(data, aov_fun), tidy = map(fit, tidy)) 
%>% unnest(tidy))