R/get_vpa_df.R

Defines functions get_vpa_df

Documented in get_vpa_df

#' Get tidy data from results generated by my_vpa or spbased_vpa
#'
#' @param vpa.res results generated by function my_vpa or spbased_vpa
#'
#' @return a list contains 1) mode.sel, dataframe with selected variables from function adespatial:foward.sel
#' 2) envfrac.df, explained variation by different environmental matrices
#' @export
#'
#' @examples
get_vpa_df <- function(vpa.res){

  extract_vpa_df <- function(res){

    mode.sel <- do.call(rbind.data.frame,res$var.sel$mode.sel) %>%
      bind_cols(env.type=stringr::word(row.names(.),1,sep="\\."),.) %>%
      as.data.frame()


    if (all(is.na(res$vpa))){ # VPA not succeed
      envfrac.df <- res$mode.res$mode.adjR2[,-2]

    } else {
      indfrac <- res$vpa$part$indfract
      if (nrow(indfrac)==4){ # for varpart(sp, env1, env2)
        envfrac.df <- data.frame(env.type=c(names(res$var.sel$mode.sel),"Residuals"),
                                 adj.r.squared=indfrac$Adj.R.square[c(1,3,4)],
                                 mod.pvalue= c(res$mode.res$mode.adjR2$mod.pvalue[names(res$var.sel$mode.sel)],NA))
      } else { # for varpart (sp, env1, env2, env3) and varpart (sp, env1, env2, env3,env4)
        envfrac.df <- data.frame(env.type=c(names(res$mode.res$mode.sig),"Residuals"),
                                 adj.r.squared=indfrac$Adj.R.square[c(1:(length(res$mode.res$mode.sig)),nrow(indfrac))],
                                 mod.pvalue= c(res$mode.res$mode.adjR2$mod.pvalue,NA))
      }

    }
    mode.summ <- list(mode.sel=mode.sel, envfrac.df=envfrac.df)
    return(mode.summ)
  }

  ###################################################
  if (attr(vpa.res,"label")=="community-based VPA"){
    vpa.res.summ <- extract_vpa_df(vpa.res)

  } else {
    vpa.res.summ <- map(vpa.res,function(mod){
      extract_vpa_df(mod)
    })

    vpa.res.sel <- map(vpa.res.summ,"mode.sel") %>%
      do.call(rbind.data.frame,.) %>%
      bind_cols(spe=stringr::word(row.names(.),1,sep="\\."),.)

    vap.res.frac <- map(vpa.res.summ,"envfrac.df") %>%
      do.call(rbind.data.frame,.) %>%
      bind_cols(spe=stringr::word(row.names(.),1,sep="\\."),.)

    vpa.res.summ <- list(mode.sel=vpa.res.sel, envfrac.df=vap.res.frac)
  }


  return(vpa.res.summ)


}
kun-ecology/ecoloop documentation built on Jan. 9, 2025, 10:20 a.m.