R语言调用SpatialFiltering函数提示找不到函数报错解决方案
报错根因
触发could not find function "SpatialFiltering"的直接原因是当前加载的R包中无对应函数:早期版本spdep曾内置空间滤波相关方法,后续空间计量类函数被拆分至独立的spatialreg包,未安装、加载该包时无法直接调用函数。
另外原代码存在数据错配隐患:使用未关联属性表的kanto空间对象构造三角网邻接关系,但滤波传入的属性数据集为lph,二者观测数量、顺序不匹配时会触发维度报错。
修复步骤
- 安装缺失的
spatialreg依赖包,在R控制台运行安装命令即可,若RStudio Cloud环境下载速度慢,可先切换至国内CRAN镜像再执行安装:
install.packages("spatialreg")
- 在现有代码的包加载区块补充
spatialreg的加载语句,语句需放在调用SpatialFiltering()之前:
library(spatialreg)
- 统一使用属性、几何已关联对齐的
kanto_lph数据集构造邻接关系、运行模型,避免数据顺序、数量不匹配的问题。
修正后可运行核心代码
library(spdep) library(spatialreg) library(spatstat) library(spgwr) library(nlme) library(lme4) library(ggplot2) needs::prioritize(magrittr) kanto <- sf::st_read('/cloud/project/asakura_sp_data/kanto_area.shp') lph <- readr::read_csv("/cloud/project/asakura_sp_data/lph.csv") kanto_lph <- dplyr::inner_join(kanto, lph, by=c("JCODE"="JCODE")) # 基于对齐后的数据集构造三角网邻接 kanto_lph.tri.nb <- sf::st_coordinates(sf::st_centroid(kanto_lph)) %>% spdep::tri2nb() lph.glm <- glm(LPH~POPD+EMP3D+offset(log(S)), data=kanto_lph) lph.gam1 <- mgcv::gam(LPH~POPD+EMP3D+s(Easting, Northing), data=kanto_lph) lph.gam2 <- mgcv::gam(LPH~POPD+EMP3D+offset(log(S))+s(Easting, Northing), data=kanto_lph) # 运行空间滤波 lph.SF <- SpatialFiltering( LPH~POPD+EMP3D, data=kanto_lph, nb=kanto_lph.tri.nb, style="W" )
若加载包后仍提示找不到函数,可直接通过命名空间调用:
spatialreg::SpatialFiltering(),避免与其他包的同名函数冲突。
内容的提问来源于stack exchange,提问作者farinelli
相关产品推荐
相关产品推荐

