使用devtools::check()执行R CMD check时非标准文件NOTE的解决方法
解决R CMD check中“顶层目录发现非标准图片文件”的NOTE提示
这是个很常见的问题,别担心!当你编译README.Rmd生成图片时,默认会把它们放在包的顶层目录,但devtools::check()(本质是调用R CMD check)对包根目录的文件有严格规范,这些自动生成的带chunk编号的图片不属于标准包结构的一部分,所以会抛出NOTE。下面是几个实用的解决办法:
方法1:指定图片输出到子目录(推荐)
这是最规范的做法,符合R包的文件结构要求:
- 在包根目录创建一个子目录,比如
man/figures(这是roxygen2官方推荐的存放文档相关图片的位置) - 在README.Rmd的开头添加代码块,设置图片输出路径:
knitr::opts_chunk$set(fig.path = "man/figures/") - 重新编译README.Rmd,此时生成的图片会自动放到
man/figures目录下,顶层不会再出现那些README-unnamed-chunk-*-1.png文件 - 记得手动删除顶层已经存在的旧图片文件
方法2:用.Rbuildignore忽略这些文件
如果暂时不想调整图片路径,可以通过忽略文件来绕过这个NOTE:
- 打开包根目录的
.Rbuildignore文件(如果没有就新建一个) - 添加以下内容,用通配符匹配所有这类自动生成的图片:
^README-unnamed-chunk-.*\\.png$ - 保存文件后重新运行
devtools::check(),这些图片就会被R CMD check忽略。不过这种方法只是临时规避,不是最优解,因为顶层目录还是会有冗余文件
方法3:用devtools::build_readme()编译README
devtools提供了专门的函数来处理README编译,帮你自动管理图片路径:
- 直接在R控制台运行:
devtools::build_readme() - 这个函数会自动把生成的图片放到
man/figures目录,无需手动设置路径,一步解决问题
额外注意
如果用方法1或3,确保README中引用图片的路径是正确的——不过不用担心,knitr在编译时会自动根据fig.path更新markdown里的图片链接,不需要手动修改。
内容的提问来源于stack exchange,提问作者Joshua Rosenberg
相关产品推荐
相关产品推荐

