如何使用反距离加权误差进行 R 空间插值

How to do R spatial interpolation with an inverse distance weighting error

我正在尝试使用反距离加权来插值一些值,但我收到了这条令人讨厌的错误消息:

Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘idw’ for signature ‘"missing", "SpatialPointsDataFrame"’

我的数据是基于英国国家电网的,这段代码重复了这个问题:

library(gstat)
library(sp)

set.seed(1)
x <- sample(30000, 1000) + 400000
y <- sample(30000, 1000) + 410000
z <- runif(1000)
source.spdf <- data.frame(x, y, z)
coordinates(source.spdf) <- ~x+y

x <- sample(30000, 100) + 400000
y <- sample(30000, 100) + 410000
destination.spdf <- data.frame(x, y)
coordinates(destination.spdf)<- ~x+y

idw.fit<-idw(formual=z~1, locations=source.spdf, newdata=destination.spdf, idp=2.0)

任何人都可以帮助更好地解释错误消息吗?谢谢

尽管此错误是由拼写错误引起的(formual = 而不是 idw 调用中的 formula = ),但错误消息有点不透明,因此以防万一如果以后有人遇到类似的错误,我想我会展示它的含义以及它出现的原因。

在 R 中,您可以设置一个新的泛型,允许您根据传递给函数的对象的 class 调用不同的方法(plot 是 classic 示例在这里,您可以调用相同的函数来绘制不同类型的对象,但根据对象类型调用完全不同的代码以生成合理的绘图)。

我们可以建立一个泛型的无聊例子。假设我们想要一个名为 boring 的通用函数,当传递两个数字时,它将简单地将它们相加,但当传递两个字符串时,会将它们粘贴在一起成为一个字符串。

setGeneric("boring", function(x, y, ...) standardGeneric("boring"))
#> [1] "boring"

setMethod("boring", c("numeric", "numeric"), function(x, y) x + y)
setMethod("boring", c("character", "character"), function(x, y) paste(x, y))

这按预期工作:

boring(x = 1, y = 2)
#> [1] 3

boring(x = "a", y = "b")
#> [1] "a b"

因为我们已经指定了允许的参数类型,如果我们尝试传入一个数字和一个字符,我们会收到一条错误消息,告诉我们该签名没有可用的方法:

boring(x = 1, y = "b")
#> Error in (function (classes, fdef, mtable) : unable to find an inherited method 
#> for function 'boring' for signature '"numeric", "character"'

但是,如果我们在调用 boring 时完全错过了 x(比如由于拼写错误而意外使用 z 而不是 x),我们不会没有得到标准 R 错误告诉我们 x is missing with no default value。相反,我们得到了这个问题中报告的错误信息:

boring(z = 1, y = 2)
#> Error in (function (classes, fdef, mtable) : unable to find an inherited method 
#> for function 'boring' for signature '"missing", "numeric"'

因此,该错误仅表示您遗漏了或错误命名了通用函数的参数。

reprex package (v2.0.0)

于 2021-11-04 创建