从多个adonis结果中提取R2值

时间:2018-01-21 11:17:35

标签: r vegan multivariate-testing

我想知道是否有某种方法可以从Provider=MSDAORA;Data Source=MyOracleDB;Integrated Security = SSPI; 包中的adonis函数中提取结果,并可能将其保存为vegan

我的意思是除了write.table之外的其他方式来控制并将R2值复制到Excel。

对于多个组合迭代运行print并将结果保存为adonis list时,这可能特别有用Authenticating Database Users with Windows

1 个答案:

答案 0 :(得分:1)

以下是如何从模型中提取所需参数的示例。我将使用链接的示例:

library(vegan)
data(dune)
data(dune.env)

这里使用lapply而不是循环:

results <- lapply(colnames(dune.env), function(x){
  form <- as.formula(paste("dune", x, sep="~")) 
  z <- adonis(form, data = dune.env, permutations=99)
  return(as.data.frame(z$aov.tab)) #convert anova table to a data frame
}
)

这将生成一个数据框列表,每个数据框的格式为

> results[[1]]
#output
          Df SumsOfSqs   MeanSqs  F.Model        R2 Pr(>F)
A1         1 0.7229518 0.7229518 3.638948 0.1681666   0.01
Residuals 18 3.5760701 0.1986706       NA 0.8318334     NA
Total     19 4.2990219        NA       NA 1.0000000     NA

现在您可以使用适当的变量命名列表元素:

names(results) <- colnames(dune.env)

转换为数据框:

results <- do.call(rbind, results)
#output
                      Df SumsOfSqs   MeanSqs  F.Model        R2 Pr(>F)
A1.A1                  1 0.7229518 0.7229518 3.638948 0.1681666   0.01
A1.Residuals          18 3.5760701 0.1986706       NA 0.8318334     NA
A1.Total              19 4.2990219        NA       NA 1.0000000     NA
Moisture.Moisture      3 1.7281651 0.5760550 3.585140 0.4019903   0.01
Moisture.Residuals    16 2.5708567 0.1606785       NA 0.5980097     NA
Moisture.Total        19 4.2990219        NA       NA 1.0000000     NA
Management.Management  3 1.4685918 0.4895306 2.767243 0.3416107   0.01
Management.Residuals  16 2.8304301 0.1769019       NA 0.6583893     NA
Management.Total      19 4.2990219        NA       NA 1.0000000     NA
Use.Use                2 0.5531507 0.2765754 1.255190 0.1286690   0.30
Use.Residuals         17 3.7458712 0.2203454       NA 0.8713310     NA
Use.Total             19 4.2990219        NA       NA 1.0000000     NA
Manure.Manure          4 1.5238805 0.3809701 2.059193 0.3544714   0.03
Manure.Residuals      15 2.7751414 0.1850094       NA 0.6455286     NA
Manure.Total          19 4.2990219        NA       NA 1.0000000     NA

现在您可以将其保存为csv或您喜欢的任何其他格式:

write.csv(results, "res.csv")

如果只需要R平方,请将lapply调用更改为:

results <- lapply(colnames(dune.env), function(x){
  form <- as.formula(paste("dune", x, sep="~"))
  z <- adonis(form, data = dune.env, permutations=99)
  return(data.frame(name = rownames(z$aov.tab), R2 = z$aov.tab$R2))
}
)