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

如何解决devtools::check()不识别BinaryFiles的可执行文件警告

问题根因

devtools::check() 并非直接调用原生R CMD check,而是基于rcmdcheck包实现检查流程,二者的执行逻辑差异是BinaryFiles配置失效的核心原因:

  • devtools::check()默认会先把源码打包为.tar.gz格式的分发包,再在临时目录解压后执行检查。如果BinaryFiles被误加入.Rbuildignore规则,打包阶段这个配置文件根本不会被纳入分发包,检查时自然读不到豁免列表。
  • 2.4.0版本之前的rcmdcheck存在逻辑缺陷:检查可执行文件时会优先判断文件的系统权限位,只要文件带可执行标记就直接抛警告,完全跳过BinaryFiles的规则匹配;而原生R CMD check会先匹配BinaryFiles豁免列表,再校验文件类型,这也是手动跑R CMD check能正常识别配置的原因。

你之前尝试的路径加./前缀、文件末尾留空行都不是问题诱因,这两种写法都符合规范。

解决方法

按可靠性从高到低推荐:

  1. 直接移除数据文件的可执行权限(一劳永逸)
    警告触发的本质是这些NMR数据文件在Linux系统下被标记了可执行权限位,直接在包根目录执行命令移除权限即可从根源解决问题,完全不需要依赖BinaryFiles配置,兼容所有版本的检查工具:
    chmod -x inst/extdata/Sample*/10/fid
    
    如果用git管理代码,提交时注意把权限变更一并提交,避免版本工具还原可执行位。
  2. 排查.Rbuildignore配置
    打开包根目录下的.Rbuildignore文件,检查是否存在匹配BinaryFiles的规则,如果有类似^BinaryFiles$的条目直接删除,确保打包时配置文件能被正常纳入分发包。
  3. 升级检查工具链
    把devtools、rcmdcheck、pkgbuild全部升级到CRAN最新版本,新版本已经修复了旧版跳过BinaryFiles匹配的逻辑bug,升级后配置行为和原生R CMD check完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:27:28