#' Extract environmental data by year.
#' @description Extract environmental data by year.
#' @param this.species, Species Temporal Data object see \code{\link[hdm]{sp_temporal_data}}.
#' @param layers_pattern A regular expression to indicate the pattern to search in layers files names.
#' @export
extract_by_year <- function(this.species,layers_pattern){
stopifnot(inherits(this.species, "sp.temporal.modeling"))
years <- sort(unique(this.species$sp_occs_year))
capasByRes <- lapply(this.species$layers_path_by_year,
function(x){
x[grep(layers_pattern,x = x)]
})
years_env_fun <- function(x){
year_env <- x$years_in_occs[1]
env_layers <- raster::stack(capasByRes[[paste0(year_env)]])
env_sp <- raster::extract(x = env_layers,
y = x[,this.species$lon_lat_vars],
df=TRUE)
names(env_sp) <- c("ID_YEAR",
names(env_sp)[2:length(names(env_sp))])
coords.x1 <- x[,this.species$lon_lat_vars[1]]
coords.x2 <- x[,this.species$lon_lat_vars[2]]
env_sp$ID_YEAR <- year_env
n_70 <- floor(dim(env_sp)[1]*.7)
env_sp$trian_test <- NA
train_index <- sample(1:dim(env_sp)[1],n_70)
env_sp$trian_test[train_index] <- "Train"
env_sp$trian_test[-train_index] <- "Test"
return(cbind(coords.x1,coords.x2,env_sp))
}
df_occs_year <- this.species$oocs_data
years_env <- df_occs_year %>%
split(.$years_in_occs) %>%
purrr::map_df(~years_env_fun(.x))
train_data <- which(years_env$trian_test=="Train")
sp.temp.data.env <- list(sp_coords = years_env[,this.species$lon_lat_vars],
coords_env_data_all = years_env,
env_data_train = years_env[train_data,
4:(dim(years_env)[2]-1)],
env_data_test = years_env[-train_data,
4:(dim(years_env)[2]-1)],
test_data =years_env[-train_data,],
sp_occs_year = years_env$ID_YEAR,
oocs_data = this.species$oocs_data,
lon_lat_vars = this.species$lon_lat_vars,
layers_path_by_year = capasByRes)
class(sp.temp.data.env) <- c("list", "sp.temporal.modeling","sp.temporal.env")
return(sp.temp.data.env)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.