r-当未在函数中指定或显式内联创建时,内部对象的文档将失败



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

我有一个.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’

我有点明白,在尚未定义的名称空间中查找对象会遇到麻烦。

但现在它变得有趣了当我访问函数中的同一对象时,包构建工作

#' 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函数应该将一些源代码写入包中。但是,如果您在尝试安装软件包时执行它,它可能会将代码写入一些不相关的地方。显然,无论在哪里编写,软件包安装代码都不会读取它。

相关内容

  • 没有找到相关文章

最新更新