设置_R_CHECK_DEPENDS_ONLY_=true时R包CRAN提交测试与vignette报错求助
解决CRAN包提交中
_R_CHECK_DEPENDS_ONLY_导致的Suggests包依赖问题 问题背景
向CRAN重新提交R包RaMS时被退回,原因是测试执行(test_check("RaMS"))和vignette重建过程中,无法找到Suggests字段中列出的tidyverse、rmarkdown等包。本地复现确认是环境变量_R_CHECK_DEPENDS_ONLY_设为true导致的,将其设为false或移除则无报错。尽管文档说明该变量仅检查Depends/Imports中的包,但R 4.2.0后其行为扩展到了示例、测试和vignette,CRAN部分检查环境可能默认开启该变量,导致依赖Suggests包的测试和构建环节报错。
解决方法
以下几种方式可解决该问题:
- 明确告知CRAN检查需要Suggests依赖:在DESCRIPTION文件中添加
Config/Needs/Check: Suggests配置项。这个设置会强制CRAN在执行检查时安装Suggests字段中的所有包,无论_R_CHECK_DEPENDS_ONLY_的取值如何,从根源上避免依赖缺失问题。 - 给测试添加条件跳过逻辑:在依赖Suggests包的测试代码开头,添加
testthat::skip_if_not_installed("包名")语句。比如需要tidyverse的测试,开头加testthat::skip_if_not_installed("tidyverse"),这样当环境未安装该包时,测试会自动跳过而非报错。 - 调整vignette的执行逻辑:在vignette的R代码块开头,添加包存在性检查。例如使用
eval = requireNamespace("tidyverse", quietly = TRUE)作为代码块选项,确保当依赖包未安装时不执行对应代码;或者在vignette开头用if (!requireNamespace("rmarkdown", quietly = TRUE)) { knitr::knit_exit() }提前终止构建,避免报错。 - 检查包内配置是否触发变量:排查包的
.Rbuildignore、Makevars等配置文件,确认是否有意外设置_R_CHECK_DEPENDS_ONLY_=true的逻辑,若有则移除相关配置。
内容的提问来源于stack exchange,提问作者Dubukay
相关产品推荐
相关产品推荐

