R升级至4.4.1后Tigris包报错:PROJ无法找到proj.db
R 4.4.1升级后GDAL/PROJ依赖报错问题
近期将R从4.3.x版本升级至4.4.1后,运行以下代码出现系列报错:
mystates <- tigris::states(cb = T) #> Warning in CPL_read_ogr(dsn, layer, query, as.character(options), quiet, : GDAL #> Error 1: PROJ: proj_identify: Cannot find proj.db shifted <- tigris::shift_geometry(mystates, geoid_column = "geoid") #> Warning in CPL_read_ogr(dsn, layer, query, as.character(options), quiet, : GDAL #> Error 1: PROJ: proj_identify: Cannot find proj.db #> Warning in CPL_crs_from_input(x): GDAL Error 1: PROJ: #> proj_get_authorities_from_database: Cannot find proj.db #> Error in eval(expr, envir, enclos): crs not found: is it missing? trnstates <- sf::st_transform(shifted, crs = "EPSG:4326") #> Error in eval(expr, envir, enclos): object 'shifted' not found
系统与依赖信息
- 系统:macOS 14.5
- R版本:4.4.1
- R包版本:
- tigris: 2.1
- sf: 1.0.16
- terra: 1.7.78
- stars: 0.6.5
- Homebrew安装的依赖:
- gdal 3.9.1
- proj 9.4.1
解决方案
1. 定位PROJ数据库路径
在终端执行命令,获取Homebrew安装的PROJ根目录:
brew --prefix proj
输出通常为/usr/local/opt/proj(Intel芯片)或/opt/homebrew/opt/proj(Apple Silicon芯片),proj.db文件位于该路径下的share/proj目录中。
2. 配置R的PROJ环境变量
临时生效(当前R会话)
在R中直接执行以下代码,手动指定PROJ数据库路径:
proj_path <- system2("brew", args = "--prefix proj", stdout = TRUE) Sys.setenv(PROJ_LIB = file.path(proj_path, "share", "proj"))
执行后重新运行报错代码验证是否解决问题。
永久生效
编辑R配置文件~/.Rprofile,添加以下代码(重启R后生效):
if (Sys.info()["sysname"] == "Darwin") { proj_prefix <- system2("brew", args = "--prefix proj", stdout = TRUE) Sys.setenv(PROJ_LIB = file.path(proj_prefix, "share", "proj")) }
3. 重新编译依赖R包
若环境变量配置后仍报错,需重新编译依赖GDAL/PROJ的R包:
install.packages(c("sf", "tigris", "terra", "stars"), type = "source")
编译过程会自动关联Homebrew安装的GDAL和PROJ版本。
4. 验证配置
重新安装后,执行以下命令检查GDAL/PROJ的关联状态:
sf::sf_extSoftVersion()
输出中应显示正确的PROJ、GDAL版本,且PROJ_LIB路径指向Homebrew安装的PROJ目录。
内容的提问来源于stack exchange,提问作者jzadra
相关产品推荐
相关产品推荐

