idw让我崩溃了

时间:2018-01-05 16:05:04

标签: r crash distance spatial

我有一项任务是为某些空间数据生成反距离加权估计。我发现当只有一个已知点和指定的最大距离时使用idw会崩溃R(版本3.3.2和3.4.2)。

library(sp)
library(gstat)

# THIS IS OK MORE THAN ONE KNOWN POINT
X<-c(15,4,20,0)
Y<-c(10,10,10,10)
P<-c(1,2,3,4)
known.df<-data.frame(X,Y,P)         
coordinates(known.df)<- ~ X + Y

X<-c(10)
Y<-c(10)
unknown.df<-data.frame(X,Y)
coordinates(unknown.df)<- ~ X + Y

idwmodel = idw(P~1,known.df,unknown.df,maxdist=1,idp=2,debug.level=0)
idwmodel@data$var1.pred
idwmodel = idw(P~1,known.df,unknown.df,maxdist=5,idp=2,debug.level=0)
idwmodel@data$var1.pred
idwmodel = idw(P~1,known.df,unknown.df,maxdist=6,idp=2,debug.level=0)
idwmodel@data$var1.pred
idwmodel = idw(P~1,known.df,unknown.df,maxdist=10,idp=2,debug.level=0)
idwmodel@data$var1.pred

# THIS IS ALSO OK SINCE maxdist IS Inf
X<-c(15)
Y<-c(10)
P<-c(1)
known.df<-data.frame(X,Y,P)         
coordinates(known.df)<- ~ X + Y

X<-c(10)
Y<-c(10)
unknown.df<-data.frame(X,Y)
coordinates(unknown.df)<- ~ X + Y

idwmodel = idw(P~1,known.df,unknown.df,maxdist=Inf,idp=2,debug.level=0)
idwmodel@data$var1.pred

# THIS CRASHES R
X<-c(15)
Y<-c(10)
P<-c(1)
known.df<-data.frame(X,Y,P)         
coordinates(known.df)<- ~ X + Y

X<-c(10)
Y<-c(10)
unknown.df<-data.frame(X,Y)
coordinates(unknown.df)<- ~ X + Y

idwmodel = idw(P~1,known.df,unknown.df,maxdist=10,idp=2,debug.level=0)
idwmodel@data$var1.pred

在我看来,基于一次观察的估计很好,无论如何,R的崩溃并不理想。你可能会说,如果只有一个已知的点那么为什么要打扰idw?好吧,我只知道在idw使用maxdist值进行过滤后有一个已知点。

有没有人知道/建议有效的解决方案?目前,我在调用idw并将maxdist设置为Inf之前将maxdist过滤器应用于我的数据。但这意味着两次计算点距离,一次是我自己,然后一次是在idw。

1 个答案:

答案 0 :(得分:0)

在我的带有R版本3.4.3(2017-11-30)的Linux机器上,我只是得到以下错误,并且在运行代码时没有崩溃。

Error in predict.gstat(g, newdata = newdata, block = block, nsim = nsim,  : 
value not allowed for:  bbox with zero size: remove neighbourhood settings?

在你的情况下,我建议在GitHub上提交一个问题(记得包括你的平台): https://github.com/edzer/gstat/issues