#' 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)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.