在R中计算带有NAs的栅格数据的变异函数

5
摘要:我有一个包含NA值的栅格数据集,想要在忽略NA值的情况下计算其半方差函数。我该怎么做?
我有一幅图片,使用readGDAL函数将其载入为im。如需复制,可在https://gist.github.com/2780792上查看图片的dput结果。我正在尝试显示此数据的半方差函数,但遇到了困难。以下是我尝试过的方法:
我尝试使用gstat包,但无法获得有效的函数调用。据我了解,我需要的基本上是数据值本身(im@data$band1)和坐标(coordinates(im))。我尝试了各种命令,例如:
> variogram(locations=coordinates(im), y = im@data$band1)
Error in is.list(object) : 'object' is missing

并且

> variogram(coordinates(im), im@data$band1)
Error in variogram.default(coordinates(im), im@data$band1) : 
  argument object and locations should be lists

我在这里做错了什么?

由于似乎没有起作用,我尝试使用geoR包,使用以下命令调用:

> variog(coords=coordinates(im), data=im@data$band1)
variog: computing omnidirectional variogram
Error in FUN(X[[1L]], ...) : NA/NaN/Inf in foreign function call (arg 4)

错误似乎与数据中存在NA有关,因此我尝试使用na.omit删除它们,但那样会保留所有的NA。这在某种程度上是有道理的,因为光栅文件必须在每个网格方格中有一些内容。是否有办法以某种方式删除NA,或者至少使variog命令忽略它们?任何帮助将不胜感激。
1个回答

6
如果传递给的数据对象是一个空间对象(您的数据是一个),则不需要指定位置,因为这些位置包含在数据中。
然而,显然值会导致问题,因此如果我们强制网格对象成为,这将删除值。 包含数据https://gist.github.com/2780792
library(gstat)
point_data <- as(im, 'SpatialPointsDataFrame')
gstat_variogram <- variogram(band1 ~ 1, data = point_data)

使用 geoR
library(geoR)
geor_variogram <- variog(coords = coordinates(point_data), 
                          data = point_data@data$band1)

甚至更简单的方法是(因为`geoR`使用类为`geodata`的对象,并包含函数`as.geodata`,可以将`SpatialPointsDataFrame`转换为`geodata`对象):
geor_variogram <- variog(as.geodata(point_data))

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