R建筑df在循环拉出pvalues

时间:2018-02-02 17:15:59

标签: r

我正在尝试循环执行anova的数据帧。 我的循环似乎有一个错误,因为最后我只留下第一次迭代后的值(i = 0)。我已尝试逐步完成"手动'在循环内部,i = 0,i = 1并且它似乎正在工作但是当我运行整个循环然后查看数据帧时,只有第一次迭代的结果。

sum_tab.sig<-data.frame(Df=as.numeric(),Sum.Sq=as.numeric(),Mean.Sq=as.numeric(),Fval=as.numeric(),Pval=as.numeric(),OTU=as.character())
for (i in 0:ncol(b_Genus_abund)) {
aov.ex <- aov(b_Genus_abund[,5+i]~b_Genus_abund$Location*b_Genus_abund$Bean*b_Genus_abund$Fungi*b_Genus_abund$Insect)
  ## summary of the anova given as a list
  sum_tab<-summary(aov.ex)[[1]]
  temp.sig<-sum_tab[sum_tab[,"Pr(>F)"]<0.1,]  
  temp.sig<-transform(temp.sig,OTU=colnames(b_Genus_abund)[5+i])
  sum_tab.sig<-rbind(sum_tab.sig,temp.sig)
  sum_tab.sig<-sum_tab.sig[!is.na(sum_tab.sig[,1]),]
  return(sum_tab.sig)
}

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

for循环不是return因为它不是函数,所以你的代码基本上不起作用,并且在第一次迭代后会出错。尝试没有return语句:

for (i in 0:ncol(b_Genus_abund)) {
aov.ex <- aov(b_Genus_abund[,5+i]~b_Genus_abund$Location*b_Genus_abund$Bean*b_Genus_abund$Fungi*b_Genus_abund$Insect)
  ## summary of the anova given as a list
  sum_tab<-summary(aov.ex)[[1]]
  temp.sig<-sum_tab[sum_tab[,"Pr(>F)"]<0.1,]  
  temp.sig<-transform(temp.sig,OTU=colnames(b_Genus_abund)[5+i])
  sum_tab.sig<-rbind(sum_tab.sig,temp.sig)
  sum_tab.sig<-sum_tab.sig[!is.na(sum_tab.sig[,1]),]
}