devtools :: document vs roxygen2 :: roxygenize

Luc*_*lia 3 r devtools roxygen2

前段时间我读过的地方devtools::documentroxygen2::roxygenize"复杂的包/坐标" 更好(这是我记得的),但不幸的是我现在找不到链接,当时我没有加深.

看看各自的帮助页面,我不清楚如何,所以我的问题是:如果有时候使用devtools::document而不是 在某些情况下更好roxygen2::roxygenize?哪种包装?

谢谢,卢卡

Tho*_*mas 7

您正在回忆roxygen2自述文件:

Roxygen对您的源代码进行实时分析:它会加载包中的所有代码,因此它可以使用R环境中的值创建文档,而不仅仅是源代码.但是,模拟包加载一般来说相当棘手,因此有两种方法可以使用roxygen:

  • roxygen2 :: roxygenise()只是源自R /目录中的所有文件

  • devtools :: document()获取R /目录中的所有文件,编译src /目录中的源代码,加载数据/目录中的数据,并且通常可以准确地模拟包加载.

如果你有一个简单的包,你可以使用roxygenise(),但对于更复杂的东西,我建议你使用document().

在做了一堆其他的东西之后,你可以在document调用中看到这种区别roxygenise(通过方式devtools:::document_roxygen3):

> document
function (pkg = ".", clean = FALSE, roclets = c("collate", "namespace", 
    "rd"), reload = TRUE) 
{
    if (!is_installed("roxygen2", 3)) {
        stop("Please install latest roxygen2", call. = FALSE)
    }
    pkg <- as.package(pkg)
    message("Updating ", pkg$package, " documentation")
    man_path <- file.path(pkg$path, "man")
    if (!file.exists(man_path)) 
        dir.create(man_path)
    if (clean) {
        file.remove(dir(man_path, full.names = TRUE))
    }
    if (!is_loaded(pkg) || (is_loaded(pkg) && reload)) {
        try(load_all(pkg, reset = clean))
    }
    document_roxygen3(pkg, roclets)
    clear_topic_index(pkg)
    invisible()
}
<environment: namespace:devtools>

> devtools:::document_roxygen3
function (pkg, roclets) 
{
    with_envvar(r_env_vars(), with_collate("C", roxygen2::roxygenise(pkg$path, 
        roclets = roclets, load_code = pkg_env)))
}
<environment: namespace:devtools>
Run Code Online (Sandbox Code Playgroud)

  • @hadley随意发布更正确的答案或编辑你想要的任何答案. (2认同)
  • 没有在`load_all()`的定义中复制(以及*它*调用的所有`devtools :::*`函数),我看不出你怎么能让这个更加清晰. (2认同)