如何使用Terra的全局函数计算NA值?

5

我正在尝试使用terra软件包中的global()函数来计算spatRaster中非NA值的数量。 所有的函数(平均值、最大值、标准差等)似乎都能正常工作,除了"isNA""notNA"。对于这两个函数,它返回以下错误:Error in fun(values(x[[i]]), ...) : could not find function "fun",这与拼写错误或不存在的函数返回的错误相同。

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

有趣的是,在查看文档(?global)时,NA函数在函数说明中被命名,但未被列为fun的参数选项。

因此,global()能否计算NAs/non-NAs? NA函数名称是否正确?

编辑:terra版本:1.4.22

2个回答

6
您所使用的 terra 版本可能已经过时,不包含函数 isNAnotNA. 你可以在当前版本源代码的 Terra 栅格方法 中查看这些函数 (对于 global 函数,请参考第 2551 至 2639 行)。
我目前正在运行版本为 1.5.21,并且这些函数正常工作。
packageVersion("terra")
#[1] ‘1.5.21’

global(r, fun="isNA")
#      isNA
#lyr.1    1

global(r, fun="notNA")
#      notNA
#lyr.1    99

您可以使用以下命令更新软件包并重新加载库:

install.packages("terra")
library(terra)

2
当我运行您的代码时,它实际上可以正常工作:
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")
< p > isNA 的输出:

      isNA
lyr.1    1
notNA 的输出结果:

      notNA
lyr.1    99

很奇怪,我刚刚复制并运行了你发布的代码以进行双重检查,但仍然会出现两个NA函数的错误,但平均值却可以正常工作。你有什么想法这其中的区别可能是什么? - ia200
1
@ia200 你正在运行哪个版本的 terra?也许你使用的是过时的版本,不包括这些函数?当我运行版本为 1.5.21 时,它对我也有效。要检查你的版本,可以运行 packageVersion("terra") - AndrewGB
1
我目前使用的是1.4.22版本,我会尝试更新看看是否能解决这个问题。 - ia200
谢谢@AndrewGB,问题已经解决了。如果您发布一个答案,我会接受它。 - ia200

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接