5

摘要:我有一个包含 NA 值的栅格数据集,并且想要计算它的变异函数,忽略 NA。我怎样才能做到这一点?

我有一张使用该readGDAL函数加载到 R 中的图像,存储为im. 为了使这个可重现,dput图像上的结果可在https://gist.github.com/2780792获得。我正在尝试显示此数据的变异函数并且正在苦苦挣扎。我将介绍到目前为止我尝试过的内容:

我尝试了该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命令忽略它们?

任何帮助将非常感激。

4

1 回答 1

6

如果传递给的数据对象gstat:variogram是空间对象(您的数据是 a SpatialGridDataFrame),那么您不需要指定位置,因为它们包含在数据中。

但是,显然这些NA值会导致问题,所以如果我们强制网格对象为 a SpatialPointsDataFrame,这将删除这些NA

im包含数据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从 a 转换SpatialPointsDataFramegeodata对象的函数

geor_variogram <- variog(as.geodata(point_data))
于 2012-05-24T11:36:22.643 回答