0
为什么getNamespaceExports()
在从外部代码调用时从.onLoad
上下文自动调用时会返回不同的结果?getNamespaceExports()从.onLoad包函数内调用
让我们假设我们有一个名为testpackage
的R包。该软件包包含以下内容称为hello.R
一个R档:
#' @export
package_var <- "some value"
#' @export
call_when_onload <- function(pkgname) {
print(getNamespaceExports(pkgname))
print(do.call("getNamespaceExports",list(pkgname),envir = globalenv()))
}
.onLoad <- function(libname, pkgname){
print(sprintf("Executing onload procedure for package %s...",pkgname))
call_when_onload(pkgname)
}
包装上有一个空间文件看起来像这样:
# Generated by roxygen2: do not edit by hand
export(call_when_onload)
export(package_var)
现在,这里的问题是:记录和建设后包,library("testpackage")
返回此:
> library(testpackage)
[1] "Executing onload procedure for package testpackage..."
character(0)
character(0)
但是当我打电话testpackage::call_when_onload("testpackage")
,我得到下面的输出(就像EXPE c):
> testpackage::call_when_onload("testpackage")
[1] "package_var" "call_when_onload"
[1] "package_var" "call_when_onload"
为什么?我怎样才能使.onLoad
函数评估上面的表达式就像他们在从外部上下文中调用时一样?
在将导出的对象写入全局环境之前,是否会执行'.onLoad'? – nilsole