当未在函数内指定或明确创建内联时,内部对象的文档失败

Documentation of internal object fails when not specified within function or explicitly created inline

有人对以下行为有解释吗?

我有一个 .R 文档文件。我想使用一个内部对象来创建一个新对象(导入或导出,这无关紧要,两者都会导致同样的失败)

对于我的包 testpak,我已经用

创建了一个内部对象
data_int <- data.frame(a = 1)
usethis::use_data(data_int, internal = TRUE, overwrite = TRUE)

为了构建包,我使用了包含以下代码的 .R 文件:

不起作用

#' some_name
#' @description something
#' @return list for each test type
test <- testpak:::data_int

#> Error in get(name, envir = asNamespace(pkg), inherits = FALSE) : object 'data_int' not found
#> ERROR: lazy loading failed for package ‘testpak’

我有点明白,在尚未定义的命名空间中查找对象时遇到了一些麻烦。

但现在它变得有趣了。 当我在一个函数中访问同一个对象时,包构建 works.

#' some_name
#' @description something
#' @return list for each test type
test <- function() testpak:::data_int
#> no error

使包构建工作的另一种方法 是在代码中添加 usethis::use_data(...)
有趣的是,它实际上并没有覆盖之前写入的内部对象! (尽管使用 overwrite = TRUE

#' some_name
#' @description something
#' @return list for each test type
data_int <- data.frame(a = 1)
usethis::use_data(data_int, internal = TRUE, overwrite = TRUE) # does not actually overwrite the previously written internal object

test <- testpak:::data_int
#> no error

sessionInfo()
#R version 3.6.3 (2020-02-29)
#Platform: x86_64-apple-darwin15.6.0 (64-bit)
#Running under: macOS Mojave 10.14.6
#roxygen2_7.1.0

如果您在包的源代码中创建一个函数,它不会被执行。你可以创建一个像

这样的函数
alwaysError <- function(...) stop("This is an error!")

在您 运行 之前它不会导致错误。

您的代码

test <- testpak:::data_int

通过执行右边的代码创建test对象。所以它会产生一个错误,因为 testpak 还不作为一个包存在,所以你不能从中提取 data_int 对象。

usethis::use_data 函数应该将一些源代码写入您的包中。但是如果你在尝试安装你的包时执行它,它可能会把代码写到一些不相关的地方。显然无论它被写在哪里,它都不会被包安装代码读取。