I am trying to count the non-NA values in a spatRaster using the global()
function from the terra package. All the functions (mean, max, sd, etc.) seem to work except for "isNA"
and "notNA"
. For these two functions it returns this error: Error in fun(values(x[[i]]), ...) : could not find function "fun"
, which is the same error it returns for a misspelled/non-existent function.
r <- rast(ncols=10, nrows=10)
values(r) <- c(1:(ncell(r)-1),NA) # Add one NA value
global(r, fun="mean", na.rm=TRUE) # works
global(r, fun="notNA") # error
global(r, fun="notAfunction") # error
Interestingly, when looking at the documentation (?global
), the NA functions are named in the function description but are not listed specifically listed as argument options for fun
.
So can global()
count the NAs/non-NAs? Are the NA function names correct?
Edit: terra version: 1.4.22
CodePudding user response:
Your version of terra
is likely outdated and does not include the functions isNA
or notNA
. You can see the functions in the source code of the current version at Terra raster methods (lines 2551 to 2639 for the global
function).
I am currently running version 1.5.21
, and the functions work fine.
packageVersion("terra")
#[1] ‘1.5.21’
global(r, fun="isNA")
# isNA
#lyr.1 1
global(r, fun="notNA")
# notNA
#lyr.1 99
You can update the package and reload the library with the following:
install.packages("terra")
library(terra)
CodePudding user response:
When I run your code, it actually works:
library(terra)
r <- rast(ncols=10, nrows=10)
values(r) <- c(1:(ncell(r)-1),NA)
global(r, fun="mean", na.rm=TRUE)
global(r, fun="isNA")
global(r, fun="notNA")
Output of isNA
:
isNA
lyr.1 1
Output of notNA
:
notNA
lyr.1 99