R/data.reduce.R

#' @title Reduces predictor data based on significance test
#'
#' @description
#' This function reduces the predictor variables of a dataset based on the significance test, resulting from function \code{gdm.varsig}.
#'
#' It can be applied to either predictor ("predData") or site pair ("spData") datasets.
#'
#' If predictor dataset is a raster object, this function requires the previous instalation of the \code{raster} package.
#'
#' For more details relating to "predData" and "spData" data formats, check \code{gdm} package.
#'
#' @param data Data to be reduced based on predictor variable significance. It can be either a predictor dataset ("predData" format) or combined site pair table ("spData" format).
#' @param datatype Type of data to de reduced: \code{pred} for predictor data ("predData" format) or \code{sp} for site pair data ("spData" format).
#' @param sigtest Predictor variable contribution significance test, as output by \code{gdm.varsig} function.
#'
#' @return Returns reduced environmental or site pair data.
#'
#' @export

data.reduce <-
  function(data,
           datatype = "sp",
           sigtest)
  {

    if (!requireNamespace("raster", quietly = TRUE)) {
      stop("raster package needed for this function to work. Please install it.",
           call. = FALSE)
    }

    data.type.check<-class(data)

    # Reducing dataset

    if(datatype=="sp"){
      cat("Reducing compiled dataset following significance test result\n")
      cat("\n")

      spData.sigtest0 <- append(as.logical(c("T","T","T","T","T","T")), sigtest)
      spData.sigtest <- append(spData.sigtest0, sigtest)
      new.data <- data[,spData.sigtest]
    }

    if(datatype=="pred"){
      cat("Reducing environmental dataset following significance test result\n")
      cat("\n")

      if(data.type.check == "RasterStack" || data.type.check == "RasterBrick" || data.type.check == "RasterLayer"){
        cat("\n")
        cat("Input data is type ", data.type.check,"\n")
        cat("\n")

        # save raster for output
        r <- raster::subset(data, 1)

        # convert raster
        image.df <- raster::as.data.frame(data, xy=TRUE)
        image.df <- cbind(1:nrow(image.df), image.df)

        names(image.df) <- c("Plot_ID", "X", "Y", paste0("b", 1:(ncol(image.df)-3)))

        data<-image.df
      }

      predData.sigtest <- append(as.logical(c("T","T","T")),sigtest)
      new.data <- data[,predData.sigtest]
    }


    if(data.type.check == "RasterStack" || data.type.check == "RasterBrick" || data.type.check == "RasterLayer"){

      r_list <- vector("list", length = (ncol(new.data)-3))

      for(i in 1:(ncol(new.data)-3)){

        raster::values(r) <- new.data[,i+3]
        names(r) <- names(new.data)[i+3]
        r_list[[i]] <- r
      }

      # stack component raster
      new.data<- raster::stack(r_list)
    }

    cat("Data reduction finished\n")
    cat("\n")

    return(new.data)
  }
steppebird/sparsegdm documentation built on May 16, 2019, 2:55 a.m.