run_permanova(comm, env, nperm)

PERMANOVA (adonis2) testing whether community composition differs across environmental groups. Returns R², F and p-value.

statisticscommunity
Args:comm — community matrixenv — factor or data.frameformula=NULLnperm=999
run_permanova <- function(comm, env, formula = NULL, nperm = 999) {
  if (!requireNamespace("vegan", quietly = TRUE)) install.packages("vegan")
  library(vegan)
  d <- vegdist(comm, method = "bray")
  if (is.null(formula)) {
    if (is.data.frame(env)) {
      formula <- as.formula(paste("d ~", paste(names(env), collapse = " + ")))
    } else {
      formula <- d ~ env
    }
  }
  res <- adonis2(formula, data = if (is.data.frame(env)) env else NULL,
                 permutations = nperm)
  as.data.frame(res)
}
# ── Example ──────────────────────────────────────────────────────
library(vegan)
comm    <- iris[, 1:4]          # traits as "species"
species <- iris$Species         # grouping factor
run_permanova(comm, data.frame(sp = species), nperm = 499)