Run PCA on a functional trait matrix and save axes and loadings.
make.PCA <- function(TRAITS, dimensionsAux, savePCA) {
paran_aux <- paran::paran(TRAITS)
pca_obj <- list()
pca_obj$traits <- TRAITS
pca_obj$PCA <- princomp(TRAITS)
pca_obj$dimensions <- dimensionsAux
eigenvalues <- summary(pca_obj$PCA)[[1]]^2
pca_obj$variance <- eigenvalues[seq_len(dimensionsAux)] / sum(eigenvalues)
pca_obj$loadings <- pca_obj$PCA$loadings
pca_obj$traitsUse <- data.frame(pca_obj$PCA$scores[, seq_len(dimensionsAux)])
if (!is.na(savePCA)) saveRDS(pca_obj, savePCA)
pca_obj
}