R/totPresRules.R

Defines functions totPresRules

Documented in totPresRules

#' Get the total number of dominant presence rules in the ruleset file
#'
#' \code{totPresRules} Get the total number of dominant presence rules in the ruleset file
#'
#' @param file file name or file path of the ".txt" file of rulesets generated by GARP
#' @param table a data.frame object produced by \code{\link{findModRules}} that contains model numbers (ruleset number) and dominant rule number
#' @param pathA file path to the directory containing environmental grids (must be in ESRI ASCII raster format)
#' @param pathB file path to the directory for ruleset grids produced by GARP
#' @param project logical; indicates if the GARP results are projected to the landscape
#'
#' @return A number of the total number of dominant presence rules.
#'
#' @details While specifying the \code{file} element, include both the path and the full file name,
#' otherwise, set the directory to the rulesets file before running the function.
#'
#' @examples
#' \dontrun{
#' PreNo <- totPresRules(file = "C:/GARP/RuleSets.txt", table = modelRule,
#' pathA = "C:/GARP/resampled/", pathB = "C:/GARP/runs/", project = FALSE)
#' }
#'
#' @import sp
#' @import raster
#'
#' @export

totPresRules <- function(file, table, pathA, pathB,project){

  Rulesets<-file
  sampledir<-pathA
  rsetPridir<-pathB
  modelRule<-table
  if (project==TRUE){
    num=2
  }else if (project==FALSE){
    num=1
  }
  ruleset <- scan(Rulesets, what = '')
  #cat(ruleset) #show ruleset
  list <- grep('\\=\\=\\d+\\=+',ruleset)
  modelNumber=c()
  number=0
  for (k in seq(1,length(modelRule$bestmodel))){
    for (i in seq(1,length(list),by=num)){ # loop for model
      model <- ruleset[list[i]]
      modelNum <- regmatches(model, regexpr("\\d+", model))
      if (modelRule$bestmodel[k] == modelNum){
        stingend=list[i+1]-1
        Rules=c()
        for (j in seq(list[i],stingend)){ # loop for rules
          if (ruleset[j]=="d"| ruleset[j]=="a" | ruleset[j]=="!" | ruleset[j]=="r"){
            Rules <- append(Rules, ruleset[j-1])
            Rules <- append(Rules,j-1)
            Rules <- append(Rules, ruleset[j])
            Rules <- append(Rules,j)
            #eachrule <- append(eachrule,ruleset[j])
          }
        }

        for (m in seq(2,length(Rules),4)){
          if (m != length(Rules)-2){
            a=as.numeric(as.character(Rules[m]))
            b=as.numeric(as.character(Rules[m+4]))-1
            if (ruleset[b]=="PRESENCE"){
              if (ruleset[a] == modelRule$BestRules[k]){
                if (ruleset[a+1]=="d"|ruleset[a+1]=="!"){
                  number=number+1
                  #print(ruleset[a])
                } else if (ruleset[a+1]=="r"){
                  number=number+1
                  #print(ruleset[a])
                }
              }
            }
          } else {
            a=as.numeric(as.character(Rules[m]))
            b=as.numeric(as.character(stingend))
            if (ruleset[b-1]=="PRESENCE"){
              if (ruleset[a] == modelRule$BestRules[k]){
                if (ruleset[a+1]=="d"|ruleset[a+1]=="!"){
                  #print(ruleset[a])
                  number=number+1
                }else if (ruleset[a+1]=="r"){
                  number=number+1
                  #print(ruleset[a])

                }
              }
            }
          }
        }
      }
    }
  }
  return (number)
}
cghaase/GARPTools documentation built on Aug. 6, 2021, 6:38 a.m.