1# Author: Robert J. Hijmans 2# Date : September 2018 3# Version 1.0 4# License GPL v3 5 6#to do 7#"gamma", "lgamma", "digamma", "trigamma") 8 9setMethod("log", signature(x="SpatRaster"), 10 function(x, base=exp(1)){ 11 opt <- spatOptions() 12 if (base == exp(1)) { 13 x@ptr <- x@ptr$math("log", opt) 14 } else if (base == 2) { 15 x@ptr <- x@ptr$math("log2", opt) 16 } else if (base == 10) { 17 x@ptr <- x@ptr$math("log10", opt) 18 } else { 19 x <- app(x, function(i) log(i, base)) 20 } 21 x 22 } 23) 24 25 26setMethod("Math", signature(x="SpatRaster"), 27 function(x){ 28 oper <- as.vector(.Generic)[1] 29 opt <- spatOptions() 30 if (substr(oper, 1, 3) == "cum") { 31 x@ptr <- x@ptr$cum(substr(oper, 4, 10), FALSE, "", FALSE) 32 } else if (oper %in% c("acos", "acosh", "asin", "asinh", "atan", "atanh", "cos", "cosh", "cospi", "sin", "sinh", "sinpi", "tan", "tanh", "tanpi")) { 33 x@ptr <- x@ptr$trig(oper, opt) 34 } else { 35 x@ptr <- x@ptr$math(oper, opt) 36 } 37 messages(x, oper) 38 } 39) 40 41 42setMethod("Math2", signature(x="SpatRaster"), 43 function(x, digits=0){ 44 opt <- spatOptions() 45 oper <- as.vector(.Generic)[1] 46 x@ptr <- x@ptr$math2(oper, digits, opt) 47 messages(x, oper) 48 } 49) 50 51 52setMethod("Math", signature(x="SpatExtent"), 53 function(x){ 54 oper <- as.vector(.Generic)[1] 55 if (oper == "floor") { 56 x@ptr <- x@ptr$floor() 57 } else if (oper == "ceiling") { 58 x@ptr <- x@ptr$ceil() 59 } else { 60 error(oper, "not implemented for SpatExtent") 61 } 62 if (!x@ptr$valid) { 63 error(oper, "invalid extent") 64 } 65 return(x) 66 } 67) 68 69setMethod("Math2", signature(x="SpatExtent"), 70 function(x, digits=0){ 71 oper <- as.vector(.Generic)[1] 72 if (oper == "round") { 73 x@ptr <- x@ptr$round(digits) 74 if (!x@ptr$valid) { 75 error(oper, "invalid extent") 76 } 77 return(x) 78 } else { 79 error(oper, "not implemented for SpatExtent") 80 } 81 } 82) 83 84 85