R语言deldir调用ppp对象报错$运算符对原子向量无效
根因分析
你遇到的报错是deldir 1.0及以上版本移除了ppp对象内置适配逻辑导致的:
旧版本deldir内置了针对spatstat::ppp类对象的S3调度方法,传入ppp对象时会自动提取坐标、窗口范围完成计算;1.0版本后开发者移除了这部分适配逻辑,直接传入ppp对象时函数会将其识别为普通原子向量,内部调用$运算符取值失败,就抛出了$ operator is invalid for atomic vectors错误。
解决方案
- 方案1(优先推荐):直接从ppp对象提取参数调用deldir,无需调整依赖版本,兼容性最好:
library(deldir) library(spatstat) points <- ppp(x=c(-77.308703, -77.256582, -77.290600, -77.135668, -77.097144), y=c(39.288603, 39.147019, 39.372818, 39.401898, 39.689203), window=owin(xrange=c(-77.7,-77), yrange=c(39.1, 39.7))) # 提取ppp对象的坐标和窗口范围传入deldir res <- deldir(x = points$x, y = points$y, rw = c(points$window$xrange, points$window$yrange))
- 方案2:使用spatstat原生三角剖分函数,如果你不需要强制使用deldir的返回格式,直接调用spatstat内置的
delaunay()函数即可,原生支持ppp对象:
# 直接返回spatstat的tess格式三角剖分结果 dtess <- delaunay(points)
- 方案3:降级deldir到兼容版本,如果你有大量旧代码需要适配,可以退回到0.2-10及之前的deldir版本,该版本仍保留ppp对象适配逻辑:
# 安装旧版本deldir packageurl <- "https://cran.r-project.org/src/contrib/Archive/deldir/deldir_0.2-10.tar.gz" install.packages(packageurl, repos=NULL, type="source")
内容的提问来源于stack exchange,提问作者Bryan
相关产品推荐
相关产品推荐

