compute_FD_indices(comm, traits)

Compute all standard FD indices (FRic, FEve, FDiv, FDis, RaoQ) in one call using FD::dbFD.

functional diversity
Args:comm — community matrixtraits — trait matrixndim=3
compute_FD_indices <- function(comm, traits, ndim = 3) {
  if (!requireNamespace("FD", quietly = TRUE)) install.packages("FD")
  library(FD)
  
  sp <- intersect(colnames(comm), rownames(traits))
  comm   <- comm[, sp]
  traits <- traits[sp, ]
  
  res <- FD::dbFD(scale(traits), comm,
                  m         = ndim,
                  calc.FRic = TRUE,
                  calc.CWM  = FALSE,
                  print.pco = FALSE)
  
  data.frame(
    site  = rownames(comm),
    FRic  = res$FRic,
    FEve  = res$FEve,
    FDiv  = res$FDiv,
    FDis  = res$FDis,
    RaoQ  = res$RaoQ
  )
}
# ── Example ──────────────────────────────────────────────────────
# iris as species, each row = one individual → aggregate to species means
library(dplyr)
sp_traits <- iris |> group_by(Species) |>
             summarise(across(where(is.numeric), mean)) |>
             column_to_rownames("Species")

# 3 fake communities
comm <- matrix(c(1,1,0, 0,1,1, 1,0,1), nrow = 3, byrow = TRUE,
               dimnames = list(c("C1","C2","C3"), rownames(sp_traits)))
compute_FD_indices(comm, sp_traits, ndim = 2)