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

R 4.0.0环境pins搭配AzureStor执行pin_read报unused argument错误

问题根因
  • 核心触发原因是基于R 4.0.0构建的Docker环境内withr包版本过低,与pins 1.0.1的调用逻辑不兼容。
  • pins 1.0.1内置的local_azure_progress函数仅在下载Blob存储内的文件时触发,该函数调用withr::local_options时传入.local_envir参数指定选项作用域,这个参数是withr 2.4.0及以上版本才新增的正式形参。
  • 低版本withr的local_options函数对应的环境参数名为.envir,受R语言的参数部分匹配规则影响,传入的.local_envir会被直接匹配到.envir形参,剩余的azure_storage_progress_bar = progress参数无法被函数识别,直接抛出unused argument错误。
  • 本地R 4.1.3环境运行正常,是因为高版本R默认拉取的CRAN包快照中withr版本满足≥2.4.0的要求,不存在参数匹配问题。
  • 同脚本内pin_list()可正常执行,是因为该操作仅列举Blob容器内的文件目录,不会触发实际的文件下载逻辑,不会调用local_azure_progress函数。手动提前设置azure_storage_progress_bar全局选项无法解决问题,因为报错发生在函数参数匹配阶段,还未执行到选项读取、设置的逻辑。
可行解决方案

按落地优先级排序:

  • 方案1(推荐):升级Docker环境中的withr包到2.4.1及以上版本。withr高版本完全兼容R 4.0.0,在R脚本或Docker构建流程中执行以下安装命令即可:
install.packages("withr", repos = "https://cloud.r-project.org/")

安装完成后重启R进程,原有代码即可正常运行。

  • 方案2(受环境限制无法升级withr时临时使用):在调用pin_read()前,通过assignInNamespace重写pins包内部的local_azure_progress函数,将环境参数名改为适配低版本withr的.envir,代码如下:
assignInNamespace(
  "local_azure_progress",
  function(progress = TRUE, env = parent.frame()) {
    if (!progress) {
      withr::local_options(azure_storage_progress_bar = progress, .envir = env)
    }
  },
  ns = "pins"
)
  • 方案3:同步升级环境内的pins、AzureStor到适配R 4.0的最新小版本,安装时自动更新所有依赖包,从根源避免版本兼容问题:
install.packages(c("pins", "AzureStor"), repos = "https://cloud.r-project.org/")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:03:25