我有一项任务是为某些空间数据生成反距离加权估计。我发现当只有一个已知点和指定的最大距离时使用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。
答案 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