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

R包开发中config.yml配置文件的合规存放位置咨询

问题

我正在开发一个R包,需借助config包读取config.yml配置文件。

我的疑问是:config.yml应当存放在包结构的哪个位置?config.get()默认读取根目录下的该文件,若将文件放在<my_package>/config.yml路径下,函数可正常定位读取,但执行devtools::check()时会抛出如下报错:

顶层发现非标准文件/目录:
'config.yml'

目前查到的适用于配置文件仅用于单元测试场景的方案不符合我的需求:我需要该配置文件供R包本身的功能逻辑调用。我知晓可通过将文件放在<my_package>/R/这类目录下,同时将所有config::get()调用替换为config::get(here::here('R/config.yml'))形式来规避报错,但这种取巧的实现方式并不规范。

请问是否有官方推荐的标准实现方案?


回答

官方规范的实现方案完全不需要取巧,按以下步骤操作即可通过所有check,同时保证包安装后功能正常:

  • 配置文件的标准存放位置是包根目录下的inst/文件夹,完整路径为<my_package>/inst/config.yml。inst/是R扩展包规范明确指定的、用于存放所有需要随包安装、运行时调用的任意格式外部资源的目录,放在这里的文件不会触发顶层非标准文件的检查报错,包安装后会被原样复制到包的安装根目录下。
  • 读取文件时不要用here::here()做路径定位——这个函数是面向开发阶段的项目根目录匹配的,包安装到用户系统后脱离开发项目环境,会出现路径定位错误。正确的路径获取方式是用R自带的system.file()函数,这个函数就是专门用来定位已安装包内的内置文件的,读取代码示例:
# 写在包的R代码里,替换原来的config::get()直接调用
config_file <- system.file("config.yml", package = "你的包名")
pkg_config <- config::get(file = config_file)
  • 几个避坑提醒:
    • 不要把config.yml放在R/目录下,这个目录是专门存放R源码脚本的,非R文件放在这里会触发代码解析类的检查警告,属于不符合包规范的做法。
    • 如果你希望支持用户自定义配置,可以在包的加载钩子.onLoad里加一层判断:先检测当前用户工作目录下是否存在config.yml,存在则优先读取用户的自定义配置,不存在再 fallback 读取inst/下内置的默认配置,这是很多CRAN公开包通用的配置逻辑。
    • 仅适用于单元测试的配置文件放在tests/testthat/目录即可,这类文件不会随包安装,正式运行时无法读取,不适合存放包核心逻辑依赖的配置。

内容的提问来源于stack exchange,提问作者Azura's Starfish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:09:26