You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pkgdown推送含sf依赖的R包至GitHub Pages时遇GEOS版本错误

解决pkgdown部署GitHub Pages时的GEOS版本错误

你的问题核心是GitHub Pages默认构建环境中GEOS版本低于3.11,而本地环境满足依赖要求,因此本地预览和rcmdcheck::rcmdcheck均能通过,但pkgdown构建时触发vignette里的sf::st_concave_hull调用导致报错。以下是几个无需新增依赖或大量改动的可行方案:

方案1:跳过vignette中依赖高版本GEOS的代码块

在PACKAGE_VIGNETTE.Rmd里,针对使用st_concave_hull的代码块添加版本判断逻辑,让构建环境自动跳过不兼容的代码:

# 在目标代码块前先判断GEOS版本
geos_version <- sf::sf_extSoftVersion()["GEOS"]
eval_cond <- package_version(geos_version) >= package_version("3.11")

然后将对应代码块的eval参数设置为eval_cond:

# ```{r, eval=eval_cond}
sf::st_concave_hull(your_data, ...)
# ```

这样pkgdown在低GEOS版本环境中会自动跳过这段代码,不会触发报错。

方案2:在GitHub Actions中升级GEOS版本

如果你的pkgdown部署通过GitHub Actions完成,直接在部署工作流文件(.github/workflows/pkgdown.yaml)中添加安装高版本GEOS的步骤:

steps:
  # 保留原有步骤(如checkout、setup R等)
  - name: Install GEOS >=3.11
    run: |
      sudo add-apt-repository ppa:ubuntugis/ppa
      sudo apt-get update
      sudo apt-get install -y libgeos-dev
  # 后续的pkgdown构建步骤

这会让构建环境安装符合要求的GEOS版本,确保st_concave_hull能正常运行。

方案3:封装函数做版本兼容处理

无需新增依赖,直接在包代码里封装一个兼容版的凹包函数,自动适配不同GEOS版本:

#' 兼容不同GEOS版本的凹包函数
#' @param x sf对象
#' @param ... 传递给st_concave_hull或st_convex_hull的参数
#' @return 凹包或凸包对象
concave_hull_compat <- function(x, ...) {
  geos_ver <- package_version(sf::sf_extSoftVersion()["GEOS"])
  if (geos_ver >= package_version("3.11")) {
    sf::st_concave_hull(x, ...)
  } else {
    message("当前GEOS版本低于3.11,使用凸包替代凹包")
    sf::st_convex_hull(x, ...)
  }
}

然后在vignette中调用这个封装后的函数,构建时就不会因版本不足报错。

内容的提问来源于stack exchange,提问作者steppe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:44:58