解决R包提交CRAN时tidyr未导入的R CMD check NOTE问题
这种明明已经删掉所有tidyr相关代码却还收到依赖NOTE的情况,我之前也碰到过,确实挺闹心的。可以按下面的步骤逐一排查:
先死磕DESCRIPTION文件:打开包根目录下的DESCRIPTION,仔细检查所有字段——不仅是Imports,还要看Depends、Suggests、Enhances这些,确保没有任何地方提到
tidyr。有时候可能之前把它加到了Suggests里忘了删,或者复制粘贴的时候不小心留了个尾巴。检查并更新NAMESPACE文件:如果你的包是用roxygen2生成文档的,先确认有没有残留的
@import tidyr或者@importFrom tidyr xxx标签在你的函数注释里。如果有,删掉后一定要重新运行devtools::document()来更新NAMESPACE文件。要是你手动编辑过NAMESPACE,直接打开看看有没有import(tidyr)之类的语句,删掉就行。排查所有角落的隐藏引用:
- 检查vignettes目录下的所有Rmd文件,哪怕是注释掉的代码块,有没有
library(tidyr)或者tidyr::xxx的调用; - 翻一遍tests/testthat里的测试脚本,说不定某个测试用例里还留着tidyr的函数;
- 看看函数的
@examples注释块,有没有忘记删掉的tidyr相关代码; - 甚至可以用RStudio的「Find in Files」功能,在整个包目录里搜索关键词
tidyr,把所有匹配的地方都过一遍,别放过任何一个角落。
- 检查vignettes目录下的所有Rmd文件,哪怕是注释掉的代码块,有没有
清理缓存并重新构建:有时候devtools的缓存会残留旧的依赖信息,试试运行
devtools::clean()清理缓存,然后重启R会话,再重新运行devtools::document()和devtools::build(),最后再跑devtools::check()。检查其他配置文件:比如包目录下有没有.Rprofile或者其他配置文件提到tidyr?虽然概率很低,但万一呢?
如果这些步骤都试过了还是有问题,那可以试试把包目录复制到一个全新的文件夹里,重新初始化并运行检查,排除本地环境的干扰。
内容的提问来源于stack exchange,提问作者Joshua Rosenberg

