如何使用反距离加权误差进行 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 创建
我正在尝试使用反距离加权来插值一些值,但我收到了这条令人讨厌的错误消息:
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 创建