使用R语言sp包over()函数报错及类型转换求助
解决sp包over()函数的类型不兼容错误
你遇到的错误是因为sp包的over()函数仅支持sp体系的空间对象,而bioms.shp是terra包的SpatVector类型,和sp的SpatialPointsDataFrame不兼容,导致找不到匹配的方法。下面提供两种可行的解决方案:
方案1:将SpatVector转换为sp对象
直接把terra的SpatVector转成sp的SpatialPolygonsDataFrame,就能继续用sp的over()函数:
# 确保加载了sp和terra包 library(sp) library(terra) # 转换SpatVector到sp格式 bioms_sp <- as(bioms.shp, "Spatial") # 原代码修改为使用转换后的对象 coordinates(ht.dat) <- c("x","y") proj4string(ht.dat) <- proj4string(bioms_sp) ht.dat$biome <- over(ht.dat, bioms_sp)$BIOME ht.dat <- as.data.frame(ht.dat) table(ht.dat$biome)
方案2:改用terra包的对应函数(推荐)
terra是sp包的继任者,功能更全面且维护更活跃,直接用terra的函数不需要跨类型转换:
# 确保加载terra包 library(terra) library(sp) # 将SpatialPointsDataFrame转成terra的SpatVector ht_terra <- vect(ht.dat) # 使用terra的extract函数获取点对应的多边形属性 ht_terra$biome <- extract(bioms.shp, ht_terra)$BIOME # 转回data.frame后统计 ht.dat <- as.data.frame(ht_terra) table(ht.dat$biome)
内容的提问来源于stack exchange,提问作者yidan wu
相关产品推荐
相关产品推荐

