使用terra::split拆分多边形时R会话崩溃的致命错误问题
terra::split拆分多边形导致R会话崩溃的解决方案
问题背景
调用terra::split拆分多边形时触发致命错误,直接导致R/R Studio会话崩溃。该代码在旧版本R的Mac设备上可正常运行,当前设备已尝试重装依赖包、更新R与R Studio,问题仍未解决,即使仅依赖terra的极简代码也会触发崩溃。
排查与修复步骤
- 检查GDAL/GEOS依赖兼容性
terra底层依赖GDAL和GEOS库,Mac系统中R二进制包可能与系统自带或brew安装的库冲突。执行以下命令查看当前绑定的库版本:
若版本不匹配,建议:terra::gdal() terra::geos_version()- 卸载brew安装的GDAL/GEOS(如有)
- 重新安装terra,强制使用R官方二进制依赖:
install.packages("terra", type = "binary")
- 降级terra版本
新版本terra可能存在兼容性问题,安装与原正常运行环境一致的旧版本:install.packages("remotes") remotes::install_version("terra", version = "1.7-37") # 替换为原环境的实际版本号 - 修复多边形拓扑错误
无效几何(如自相交)可能触发崩溃,先检查并修复:poly <- terra::makeValid(poly) terra::split(poly, poly$group_col) - 干净环境测试
启动R时添加--vanilla参数,禁用自定义配置和自动加载的包,排除第三方干扰:
仅加载terra后运行复现代码测试。R --vanilla
临时替代方案
若以上方法无效,用sf包替代实现拆分逻辑:
library(sf) # 转换为sf对象 sf_poly <- st_as_sf(poly) # 拆分多边形 split_sf <- split(sf_poly, sf_poly$group_col) # 转换回terra对象 split_terra <- lapply(split_sf, st_as_sf) |> terra::vctrs_list()
内容的提问来源于stack exchange,提问作者Amantil
相关产品推荐
相关产品推荐

