当未在函数内指定或明确创建内联时,内部对象的文档失败
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
函数应该将一些源代码写入您的包中。但是如果你在尝试安装你的包时执行它,它可能会把代码写到一些不相关的地方。显然无论它被写在哪里,它都不会被包安装代码读取。
有人对以下行为有解释吗?
我有一个 .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
函数应该将一些源代码写入您的包中。但是如果你在尝试安装你的包时执行它,它可能会把代码写到一些不相关的地方。显然无论它被写在哪里,它都不会被包安装代码读取。