Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions R/model_bioclim.R
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@
#' @param bg coordinates of background points to be used for modeling.
#' @param user.grp a list of two vectors containing group assignments for
#' occurrences (occs.grp) and background points (bg.grp).
#' @param bgMsk a RasterStack or a RasterBrick of environmental layers cropped
#' and masked to match the provided background extent.
#' @param bgMsk a SpatRaster of environmental layers cropped and masked to
#' match the provided background extent.
#' @param logger Stores all notification messages to be displayed in the Log
#' Window of Wallace GUI. Insert the logger reactive list here for running
#' in shiny, otherwise leave the default NULL.
Expand All @@ -55,7 +55,7 @@
#' bg <- read.csv(system.file("extdata/Bassaricyon_alleni_bgPoints.csv",
#' package = "wallace"))
#' partblock <- part_partitionOccs(occs, bg, method = 'block')
#' m <- model_bioclim(occs, bg, partblock, envs)
#' m <- model_bioclim(occs, bg, partblock, terra::rast(envs))
#' }
#'
#' @return Function returns an ENMevaluate object with all the evaluated models
Expand All @@ -80,7 +80,7 @@ model_bioclim <- function(occs, bg, user.grp, bgMsk, logger = NULL,
smartProgress(logger,
message = paste0("Building/Evaluating BIOCLIM model for ",
spName(spN), "..."), {
e <- ENMeval::ENMevaluate(occs = occs.xy, envs = terra::rast(bgMsk), bg = bg.xy,
e <- ENMeval::ENMevaluate(occs = occs.xy, envs = bgMsk, bg = bg.xy,
algorithm = "bioclim", partitions = "user",
user.grp = user.grp)
})
Expand Down
15 changes: 11 additions & 4 deletions R/model_maxent.R
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@
#' @param bg coordinates of background points to be used for modeling.
#' @param user.grp a list of two vectors containing group assignments for
#' occurrences (occs.grp) and background points (bg.grp).
#' @param bgMsk a RasterStack or a RasterBrick of environmental layers cropped
#' and masked to match the provided background extent.
#' @param bgMsk a SpatRaster of environmental layers cropped and masked to
#' match the provided background extent.
#' @param rms vector of range of regularization multipliers to be used in the
#' ENMeval run.
#' @param rmsStep step to be used when defining regularization multipliers to
Expand Down Expand Up @@ -76,7 +76,7 @@
#' rmsStep <- 1
#' fcs <- c('L', 'LQ')
#' m <- model_maxent(occs = occs, bg = bg, user.grp = partblock,
#' bgMsk = envs, rms = rms, rmsStep, fcs,
#' bgMsk = terra::rast(envs), rms = rms, rmsStep, fcs,
#' clampSel = TRUE, algMaxent = "maxnet",
#' parallel = FALSE)
#' }
Expand All @@ -86,6 +86,7 @@
#' @author Jamie M. Kass <jamie.m.kass@@gmail.com>
#' @author Gonzalo E. Pinilla-Buitrago <gepinillab@@gmail.com>
#' @author Bethany A. Johnson <bjohnso005@@citymail.cuny.edu>
#' @author Daniel Lopez-Lozano <dlopezlozano@@amnh.org.co>
# @note

#' @seealso \code{\link[ENMeval]{ENMevaluate}}
Expand Down Expand Up @@ -192,12 +193,18 @@ model_maxent <- function(occs, bg, user.grp, bgMsk, rms, rmsStep, fcs,
# get just coordinates
occs.xy <- occs %>% dplyr::select("longitude", "latitude")
bg.xy <- bg %>% dplyr::select("longitude", "latitude")

# convert the categorical variables to factors
if (!is.null(catEnvs)) {
bgMsk[[catEnvs]] <- terra::as.factor(bgMsk[[catEnvs]])
}

# run ENMeval
e <- ENMeval::ENMevaluate(occs = as.data.frame(occs.xy),
bg = as.data.frame(bg.xy),
partitions = 'user',
user.grp = user.grp,
envs = terra::rast(bgMsk),
envs = bgMsk,
tune.args = tune.args,
doClamp = clampSel,
algorithm = algMaxent,
Expand Down
18 changes: 9 additions & 9 deletions R/penvs_bgMask.R
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@
#' environmental layers to be used in the modeling are cropped and masked
#' to the provided background area. The background area is determined in
#' the function penvs_bgExtent from the same component. The function returns
#' the provided environmental layers cropped and masked in the provided
#' format (either a rasterBrick or a rasterStack).
#' the provided environmental layers cropped and masked in the SpatRaster
#' format.
#'
#' @param occs data frame of cleaned or processed occurrences obtained from
#' components occs: Obtain occurrence data or, poccs: Process occurrence data.
Expand All @@ -59,10 +59,11 @@
#' bgMask <- penvs_bgMask(occs, envs, bgExt)
#' }
#'
#' @return A RasterStack or a RasterBrick of environmental layers cropped and
#' @return A SpatRaster of environmental layers cropped and
#' masked to match the provided background extent.
#' @author Jamie Kass <jamie.m.kass@@gmail.com>
#' @author Gonzalo E. Pinilla-Buitrago <gepinillab@@gmail.com>
#' @author Daniel Lopez-Lozano <dlopezlozano@@amnh.org.co>
#' @seealso \code{\link{penvs_userBgExtent}},
#' \code{\link{penvs_drawBgExtent}}, \code{\link{penvs_bgExtent}},
#' \code{\link{penvs_bgSample}}
Expand All @@ -81,18 +82,17 @@ penvs_bgMask <- function(occs, envs, bgExt, logger = NULL, spN = NULL) {
message = paste0("Masking rasters for ",
spName(spN), "..."), {

bgCrop <- raster::crop(envs, bgExt)
bgMask <- raster::mask(bgCrop, bgExt)
envs <- terra::rast(envs)
bgCrop <- terra::crop(envs, bgExt)
bgMask <- terra::mask(bgCrop, terra::vect(bgExt))
# GEPB: Workaround when raster alignment is changed after crop, which makes appears
# new duplicated occs in the same grid cells.
occsEnvsVals <- as.data.frame(raster::extract(bgMask,
occsEnvsVals <- as.data.frame(terra::extract(bgMask,
occs[, c('longitude', 'latitude')],
cellnumbers = TRUE))
occs.dups <- duplicated(occsEnvsVals[, 1])
if (sum(occs.dups) > 0) {
bgMask <- terra::project(terra::rast(bgMask),
terra::rast(envs), method = 'near')
bgMask <- methods::as(bgMask, "Raster")
bgMask <- terra::project(bgMask, envs, method = 'near')
}
})

Expand Down
2 changes: 1 addition & 1 deletion R/penvs_bgSample.R
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
#' doBrick = TRUE)
#' bgExt <- penvs_bgExtent(occs, bgSel = 'bounding box', bgBuf = 0.5)
#' bgMask <- penvs_bgMask(occs, envs, bgExt)
#' bgsample <- penvs_bgSample(occs, bgMask, bgPtsNum = 1000)
#' bgsample <- penvs_bgSample(occs, raster::stack(bgMask), bgPtsNum = 1000)
#' }
#'
#' @return a dataframe containing point coordinates (longitude and latitude).
Expand Down
2 changes: 1 addition & 1 deletion R/vis_bioclimPlot.R
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
#' bg <- read.csv(system.file("extdata/Bassaricyon_alleni_bgPoints.csv",
#' package = "wallace"))
#' partblock <- part_partitionOccs(occs, bg, method = 'block')
#' m <- model_bioclim(occs, bg, partblock, envs)
#' m <- model_bioclim(occs, bg, partblock, terra::rast(envs))
#' bioclimPlot <- vis_bioclimPlot(x = m@@models$bioclim,
#' a = 1, b = 2, p = 1)
#' }
Expand Down
2 changes: 1 addition & 1 deletion R/xfer_area.R
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
#' partblock <- part_partitionOccs(occs, bg, method = 'block')
#' m <- model_maxent(occs, bg,
#' user.grp = partblock,
#' bgMsk = envs, rms = c(1:2),
#' bgMsk = terra::rast(envs), rms = c(1:2),
#' rmsStep = 1, fcs = c('L', 'LQ'),
#' clampSel = TRUE,
#' algMaxent = "maxnet",
Expand Down
2 changes: 1 addition & 1 deletion R/xfer_time.R
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@
#' occs <- read.csv(system.file("extdata/Bassaricyon_alleni.csv",package = "wallace"))
#' bg <- read.csv(system.file("extdata/Bassaricyon_alleni_bgPoints.csv", package = "wallace"))
#' partblock <- part_partitionOccs(occs, bg, method = 'block')
#' m <- model_maxent(occs, bg, user.grp = partblock, bgMsk = envs, rms = c(1:2),
#' m <- model_maxent(occs, bg, user.grp = partblock, bgMsk = terra::rast(envs), rms = c(1:2),
#' rmsStep = 1, fcs = c('L', 'LQ'),
#' clampSel = TRUE, algMaxent = "maxnet", parallel = FALSE)
#' occsEnvs <- m@@occs
Expand Down
2 changes: 1 addition & 1 deletion R/xfer_userEnvs.R
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
#' rasName = list.files(system.file("extdata/wc",package = "wallace"),
#' pattern = ".tif$", full.names = FALSE))
#' partblock <- part_partitionOccs(occs, bg, method = 'block')
#' m <- model_maxent(occs, bg, user.grp = partblock, bgMsk = envs, rms = c(1:2),
#' m <- model_maxent(occs, bg, user.grp = partblock, bgMsk = terra::rast(envs), rms = c(1:2),
#' rmsStep = 1, fcs = c('L', 'LQ'), clampSel = TRUE, algMaxent = "maxnet", parallel = FALSE)
#' envsFut <- list.files(path = system.file('extdata/wc/future',
#' package = "wallace"),
Expand Down
2 changes: 1 addition & 1 deletion inst/shiny/modules/part_spat.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ groups_{{spAbr}} <- part_partitionOccs(
occs = occs_{{spAbr}} ,
bg = bgSample_{{spAbr}},
method = "{{method_code_rmd}}",
bgMask = bgMask_{{spAbr}},
bgMask = raster::stack(bgMask_{{spAbr}}),
aggFact = {{aggFact_rmd}})
```
9 changes: 5 additions & 4 deletions inst/shiny/modules/penvs_bgExtent.R
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,8 @@ penvs_bgExtent_module_server <- function(input, output, session, common) {
bgMask <- penvs_bgMask(spp[[sp]]$occs, envs.global[[spp[[sp]]$envs]],
spp[[sp]]$procEnvs$bgExt, logger, spN = sp)
req(bgMask)
bgNonNA <- raster::ncell(bgMask) - raster::freq(bgMask, value = NA)[[1]]
bgMaskR <- raster::stack(bgMask)
bgNonNA <- raster::ncell(bgMaskR) - raster::freq(bgMaskR, value = NA)[[1]]
if ((bgNonNA + 1) < input$bgPtsNum) {
logger %>%
writeLog(
Expand All @@ -138,15 +139,15 @@ penvs_bgExtent_module_server <- function(input, output, session, common) {
"(n = ", bgNonNA, "). Please reduce the number of requested points.")
return()
}
bgPts <- penvs_bgSample(spp[[sp]]$occs, bgMask, input$bgPtsNum, logger,
bgPts <- penvs_bgSample(spp[[sp]]$occs, bgMaskR, input$bgPtsNum, logger,
spN = sp)
req(bgPts)
withProgress(
message = paste0("Extracting background values for ", spName(sp), "..."), {
bgEnvsVals <- as.data.frame(raster::extract(bgMask, bgPts))
bgEnvsVals <- as.data.frame(terra::extract(bgMask, bgPts))
})

NApoints <- sum(rowSums(is.na(raster::extract(bgMask, spp[[sp]]$occs[ , c("longitude", "latitude")]))))
NApoints <- sum(rowSums(is.na(terra::extract(bgMask, spp[[sp]]$occs[ , c("longitude", "latitude")]))))
if (NApoints > 0) {
logger %>%
writeLog(type = "error", hlSpp(sp),
Expand Down
4 changes: 2 additions & 2 deletions inst/shiny/modules/penvs_bgExtent.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ bgMask_{{spAbr}} <- penvs_bgMask(
# Sample background points from the provided area
bgSample_{{spAbr}} <- penvs_bgSample(
occs = occs_{{spAbr}},
bgMask = bgMask_{{spAbr}},
bgMask = raster::stack(bgMask_{{spAbr}}),
bgPtsNum = {{bgPtsNum_rmd}})
# Extract values of environmental layers for each background point
bgEnvsVals_{{spAbr}} <- as.data.frame(raster::extract(bgMask_{{spAbr}}, bgSample_{{spAbr}}))
bgEnvsVals_{{spAbr}} <- as.data.frame(terra::extract(bgMask_{{spAbr}}, bgSample_{{spAbr}}))
##Add extracted values to background points table
bgEnvsVals_{{spAbr}} <- cbind(scientific_name = paste0("bg_", "{{spName}}"), bgSample_{{spAbr}},
occID = NA, year = NA, institution_code = NA, country = NA,
Expand Down
9 changes: 5 additions & 4 deletions inst/shiny/modules/penvs_drawBgExtent.R
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,8 @@ penvs_drawBgExtent_module_server <- function(input, output, session, common) {
logger,
spN = sp)
req(bgMask)
bgNonNA <- raster::ncell(bgMask) - raster::freq(bgMask, value = NA)[[1]]
bgMaskR <- raster::stack(bgMask)
bgNonNA <- raster::ncell(bgMaskR) - raster::freq(bgMaskR, value = NA)[[1]]
if ((bgNonNA + 1) < input$bgPtsNum) {
logger %>%
writeLog(
Expand All @@ -138,17 +139,17 @@ penvs_drawBgExtent_module_server <- function(input, output, session, common) {
return()
}
bgPts <- penvs_bgSample(spp[[sp]]$occs,
bgMask,
bgMaskR,
input$bgPtsNum,
logger,
spN = sp)
req(bgPts)
withProgress(message = paste0("Extracting background values for ",
spName(sp), "..."), {
bgEnvsVals <- as.data.frame(raster::extract(bgMask, bgPts))
bgEnvsVals <- as.data.frame(terra::extract(bgMask, bgPts))
})

if (sum(rowSums(is.na(raster::extract(bgMask, spp[[sp]]$occs[ , c("longitude", "latitude")])))) > 0) {
if (sum(rowSums(is.na(terra::extract(bgMask, spp[[sp]]$occs[ , c("longitude", "latitude")])))) > 0) {
logger %>%
writeLog(type = "error", hlSpp(sp),
"One or more occurrence points have NULL raster values.",
Expand Down
4 changes: 2 additions & 2 deletions inst/shiny/modules/penvs_drawBgExtent.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ bgMask_{{spAbr}} <- penvs_bgMask(
# Sample background points from the provided area
bgSample_{{spAbr}} <- penvs_bgSample(
occs = occs_{{spAbr}},
bgMask = bgMask_{{spAbr}},
bgMask = raster::stack(bgMask_{{spAbr}}),
bgPtsNum = {{bgPtsNum_rmd}})
# Extract values of environmental layers for each background point
bgEnvsVals_{{spAbr}} <- as.data.frame(raster::extract(bgMask_{{spAbr}}, bgSample_{{spAbr}}))
bgEnvsVals_{{spAbr}} <- as.data.frame(terra::extract(bgMask_{{spAbr}}, bgSample_{{spAbr}}))
##Add extracted values to background points table
bgEnvsVals_{{spAbr}} <- cbind(scientific_name = paste0("bg_", "{{spName}}"), bgSample_{{spAbr}},
occID = NA, year = NA, institution_code = NA, country = NA,
Expand Down
9 changes: 5 additions & 4 deletions inst/shiny/modules/penvs_userBgExtent.R
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,8 @@ penvs_userBgExtent_module_server <- function(input, output, session, common) {
logger,
spN = sp)
req(bgMask)
bgNonNA <- raster::ncell(bgMask) - raster::freq(bgMask, value = NA)[[1]]
bgMaskR <- raster::stack(bgMask)
bgNonNA <- raster::ncell(bgMaskR) - raster::freq(bgMaskR, value = NA)[[1]]
if ((bgNonNA + 1) < input$bgPtsNum) {
logger %>%
writeLog(
Expand All @@ -159,17 +160,17 @@ penvs_userBgExtent_module_server <- function(input, output, session, common) {
return()
}
bgPts <- penvs_bgSample(spp[[sp]]$occs,
bgMask,
bgMaskR,
input$bgPtsNum,
logger,
spN = sp)
req(bgPts)
withProgress(message = paste0("Extracting background values for ",
spName(sp), "..."), {
bgEnvsVals <- as.data.frame(raster::extract(bgMask, bgPts))
bgEnvsVals <- as.data.frame(terra::extract(bgMask, bgPts))
})

if (sum(rowSums(is.na(raster::extract(bgMask, spp[[sp]]$occs[ , c("longitude", "latitude")])))) > 0) {
if (sum(rowSums(is.na(terra::extract(bgMask, spp[[sp]]$occs[ , c("longitude", "latitude")])))) > 0) {
logger %>%
writeLog(type = "error", hlSpp(sp),
"One or more occurrence points have NULL raster values.",
Expand Down
4 changes: 2 additions & 2 deletions inst/shiny/modules/penvs_userBgExtent.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ bgMask_{{spAbr}} <- penvs_bgMask(
# Sample background points from the provided area
bgSample_{{spAbr}} <- penvs_bgSample(
occs = occs_{{spAbr}},
bgMask = bgMask_{{spAbr}},
bgMask = raster::stack(bgMask_{{spAbr}}),
bgPtsNum = {{bgPtsNum_rmd}})
# Extract values of environmental layers for each background point
bgEnvsVals_{{spAbr}} <- as.data.frame(raster::extract(bgMask_{{spAbr}}, bgSample_{{spAbr}}))
bgEnvsVals_{{spAbr}} <- as.data.frame(terra::extract(bgMask_{{spAbr}}, bgSample_{{spAbr}}))
##Add extracted values to background points table
bgEnvsVals_{{spAbr}} <- cbind(scientific_name = paste0("bg_", "{{spName}}"), bgSample_{{spAbr}},
occID = NA, year = NA, institution_code = NA, country = NA,
Expand Down
12 changes: 6 additions & 6 deletions inst/shiny/modules/vis_mapPreds.R
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ vis_mapPreds_module_server <- function(input, output, session, common) {
# pick the prediction that matches the model selected
predSel <- evalOut()@predictions[[curModel()]]
predSel <- raster::raster(predSel)
raster::crs(predSel) <- raster::crs(bgMask())
raster::crs(predSel) <- raster::crs(raster::stack(bgMask()))
if(is.na(raster::crs(predSel))) {
logger %>% writeLog(
type = "error",
Expand All @@ -103,10 +103,10 @@ vis_mapPreds_module_server <- function(input, output, session, common) {
if (spp[[curSp()]]$rmm$model$algorithms == "BIOCLIM") {
predType <- "BIOCLIM"
m <- evalOut()@models[[curModel()]]
predSel <- dismo::predict(m, terra::rast(bgMask()))
predSel <- dismo::predict(m, bgMask())
predSel <- raster::raster(predSel)
# define crs
raster::crs(predSel) <- raster::crs(bgMask())
raster::crs(predSel) <- raster::crs(raster::raster(bgMask()))
# define predSel name
names(predSel) <- curModel()
} else if (spp[[curSp()]]$rmm$model$algorithms %in% c("maxent.jar", "maxnet")) {
Expand All @@ -125,7 +125,7 @@ vis_mapPreds_module_server <- function(input, output, session, common) {
clamping <- spp[[curSp()]]$rmm$model$algorithm$maxent$clamping
if (spp[[curSp()]]$rmm$model$algorithms == "maxnet") {
if (predType == "raw") predType <- "exponential"
predSel <- predictMaxnet(m, bgMask(),
predSel <- predictMaxnet(m, raster::stack(bgMask()),
type = predType,
clamp = FALSE)
} else if (spp[[curSp()]]$rmm$model$algorithms == "maxent.jar") {
Expand All @@ -135,15 +135,15 @@ vis_mapPreds_module_server <- function(input, output, session, common) {
} else {
doClamp <- "doclamp=false"
}
predSel <- dismo::predict(m, terra::rast(bgMask()),
predSel <- dismo::predict(m, bgMask(),
args = c(outputFormat, doClamp),
#na.rm = TRUE
)
predSel <- raster::raster(predSel)
}
})
# define crs
raster::crs(predSel) <- raster::crs(bgMask())
raster::crs(predSel) <- raster::crs(raster::stack(bgMask()))
# define predSel name
names(predSel) <- curModel()

Expand Down
Loading