从多个 adonis 结果中提取 R2 值

Extract R2 values from multiple adonis results

我想知道是否有某种方法可以从 vegan 包中的 adonis 函数中提取结果并可能通过 write.table 保存?

我的意思是除了 print 以外的其他方式来控制和复制过去的 R2 值到 Excel。

这在 运行 adonis 迭代多个组合并将对象与结果保存到一个 list 中时特别有用

这是一个关于如何从模型中提取所需参数的示例。我将使用链接示例:

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))
}
)