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

非R包分析项目中使用testthat、roxygen及devtools功能的实践疑问

非R包分析项目中使用testthat、roxygen及devtools功能的实践疑问

我太懂这种头疼的感觉了!很多时候我们做数据分析的项目不需要打包,但又眼馋包开发那套高效的工具链——testthat的自动化测试、roxygen的便捷文档、devtools的各种快捷命令,可一用就报错,比如你遇到的devtools::test()找不到包根的问题,简直是常规操作。下面就给你说说非包项目里怎么实际用上这些工具:

一、用testthat做自动化测试(不用devtools::test())

devtools::test()确实是为包项目设计的,它依赖包根目录的DESCRIPTION文件来定位测试文件。在普通项目里,我们直接用testthat的原生函数就行:

  • 先初始化测试结构:用usethis::use_testthat(),哪怕不是包项目,它也会帮你创建tests/testthat文件夹和tests/testthat.R启动文件(这个启动文件可以不用改,里面已经写好了调用testthat的代码)。
  • 创建测试文件:比如你要测试R/myfunc.R里的函数,直接运行usethis::use_test("myfunc"),它会生成tests/testthat/test_myfunc.R,你在里面写测试用例就行,比如:
    test_that("加法函数正常工作", {
      expect_equal(add(1, 2), 3)
    })
    
  • 运行测试:不用devtools::test(),直接用testthat::test_dir("tests/testthat"),或者指定单个文件testthat::test_file("tests/testthat/test_myfunc.R"),就能正常执行测试了。

二、roxygen2的文档生成(适配非包场景)

roxygen2本质是解析代码里的特殊注释来生成文档,非包项目里我们不需要生成包格式的帮助文件,但可以用它来生成可读性好的文档:

  • 先在你的函数上方加roxygen风格的注释,比如:
    #' 两个数相加
    #' @param x 第一个数值
    #' @param y 第二个数值
    #' @return 相加后的结果
    #' @examples
    #' add(1, 3)
    add <- function(x, y) {
      x + y
    }
    
  • 如果想生成可查看的帮助文档,可以先在项目根目录创建一个极简的DESCRIPTION文件(比如只写Package: myproject),然后运行devtools::document(),之后就能用?add查看函数帮助了;要是想生成HTML格式的文档,可以用tools::Rd2HTML()把生成的Rd文件转成HTML。
  • 要是觉得创建DESCRIPTION太麻烦,也可以直接把roxygen注释当作可读性强的代码注释来用,一样能提升代码的可维护性。

三、devtools其他功能的替代方案

devtools里很多函数是包专属的,但我们可以用其他方式实现类似效果:

  • 加载项目里的所有脚本:不用devtools::load_all(),可以用source()配合here包来避免路径问题,比如source(here::here("R", "myfunc.R")),或者写个循环批量加载R文件夹下的所有脚本。
  • 代码检查:不用devtools::check(),可以用lintr::lint_dir("R")来做代码风格检查,效果类似。

最后补充一句:usethis的很多函数其实都支持非包项目,比如usethis::use_readme_md()、usethis::use_git()这些,你可以直接用,不用纠结是不是包。

备注:内容来源于stack exchange,提问作者ds_col

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:47:38