如何访问R中包示例中的自定义环境

如何访问R中包示例中的自定义环境,r,devtools,roxygen2,R,Devtools,Roxygen2,我有一个R包,其中我使用.onLoad()函数在包加载时定义了一个自定义环境。这很好,但是当我使用rxoygen2和do devtools::check()记录函数时,如果有任何对使用此环境的函数的引用,check()会抛出一个错误,因为它找不到环境 例如,包含单个R文件的包: .onLoad <- function(libname, pkgname){ set_my_env() } #' Sets my environment set_my_env <- function

我有一个R包,其中我使用.onLoad()函数在包加载时定义了一个自定义环境。这很好,但是当我使用rxoygen2和do devtools::check()记录函数时,如果有任何对使用此环境的函数的引用,check()会抛出一个错误,因为它找不到环境

例如,包含单个R文件的包:

.onLoad <- function(libname, pkgname){
    set_my_env()
}

#' Sets my environment
set_my_env <- function(){
    message("Setting my environment")
    .my_env <<- new.env(parent = emptyenv())
    .my_env$variable <- "My variable"

}

#' my_fn function
#' @examples my_fn()
my_fn <- function(){
    get("variable", envir = .my_env)
}
如果我从roxygen2文档中删除examples行,那么包就可以正常构建


我的包依赖于这个环境,我不想把我所有的示例都包装在\dontrun{}中。如何获得示例以了解此环境?环境名称前的点在这里没有区别。

为什么要在
.onLoad
上创建环境,而不是只在包名称空间中创建环境(可能不导出环境)?它看起来更干净-请参见(当您确实需要副作用时)。另外,如果删除.onLoad函数并在脚本的顶层调用set_my_env(),则在运行check()时会出现相同的错误。这就是你的意思吗?这不是devtools或roxygen2的错误,我在命令行运行R CMD check时也会遇到同样的错误。我怀疑从(base)check运行的示例在某种程度上是来自用户工作区的“沙盒”。它可能类似于
examples
函数的“local=TRUE”参数。运行示例的检查代码是一个迂回曲折的通道迷宫,所有这些都是一样的。。。可能得问问R-dev…谢谢,我想是这样的。不过,从封装包中进行沙箱处理似乎有些奇怪。我目前的解决方法是将set_My_env()函数放在每个示例块的开头。。。
* checking examples ... ERROR
Running examples in ‘mypackage-Ex.R’ failed
The error most likely occurred in:

> base::assign(".ptime", proc.time(), pos = "CheckExEnv")
> ### Name: my_fn
> ### Title: my_fn function
> ### Aliases: my_fn
> 
> ### ** Examples
> 
> my_fn()
Error in get("variable", envir = .my_env) : object '.my_env' not found
Calls: my_fn -> get
Execution halted