摘要:我有一个包含NA值的栅格数据集,并且想要计算它的变异函数,而忽略了NA。我怎么能这样做?
我有一个图像,我使用readGDAL
函数加载到R中,存储为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。这有点意义,因为光栅文件必须在每个网格方块中都有一些东西。有没有办法以某种方式删除NAs,或者至少让variog
命令忽略它们?
非常感谢任何帮助。
答案 0 :(得分:4)
如果传递给gstat:variogram
的数据对象是空间对象(您的数据是SpatialGridDataFrame
),那么您不需要指定位置,因为这些位置包含在数据中。
但是,显然NA
值导致了问题,因此如果我们强制网格对象为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
转换为SpatialPointsDataFrame
对象的函数geodata
/ p>
geor_variogram <- variog(as.geodata(point_data))