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

R包开发中devtools::test()正常但devtools::check()无法定位yml文件

R包开发中devtools::check()找不到inst目录下.yml配置文件的问题及解决方案

问题背景

开发R包时使用testthat编写单元测试,需要读取后缀为.yml的外部配置文件。按照R包开发规范,该文件放置在inst目录下。调用system.file()(而非base::system.file(),便于pkgload:::shim_system.file()拦截调用)配合yaml包加载文件执行单元测试时,运行devtools::test()全部测试通过,但运行devtools::check()时持续抛出文件未找到的错误。

测试过程中发现特殊现象:将文件后缀从.yaml/.yml修改为.txt后,devtools::check()不再报错。

相关代码与报错

测试代码:

## 位于test_that()内部
cf <- system.file("config", "config1.yml", package = "mypackage", mustWork = TRUE)

devtools::check()运行报错:

Error in `system.file("config", "config1.yml", package = "mypackage", mustWork = TRUE)`: no file found
Backtrace:
    x
1. \-base::system.file(...) test-set_config.R:34:2

[ FAIL 1 | WARN 0 | SKIP 0 | PASS 15 ]

注:将config1.yml重命名为config1.txt后,devtools::check()运行无报错。

运行环境:

  • devtools版本:CRAN发布的最新v2.4.2
  • R版本:4.1.1

问题定位与解决方案

后续排查已确认问题根源:此前为了忽略CI相关的yaml文件,误在.Rbuildignore中添加了[.]yml、[.]yaml通配规则,导致打包检查时inst目录下的yml配置文件也被过滤排除,因此无法被读取。

将.Rbuildignore中的yml/yaml匹配规则修改为匹配具体路径的精准规则后,问题即可解决,无需修改配置文件后缀。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:06:03