【发布时间】:2012-11-06 08:07:02
【问题描述】:
我的 R 包使用内部变量 x。如果我加载包(我只尝试过使用devtools::load_all),那么x 不会出现在ls() 列表中,但它确实有一个值。我怎样才能避免这种情况?
我很满意用户能够使用myPackage::x 访问变量,但不仅仅是x。
【问题讨论】:
标签: r namespaces export package devtools
我的 R 包使用内部变量 x。如果我加载包(我只尝试过使用devtools::load_all),那么x 不会出现在ls() 列表中,但它确实有一个值。我怎样才能避免这种情况?
我很满意用户能够使用myPackage::x 访问变量,但不仅仅是x。
【问题讨论】:
标签: r namespaces export package devtools
尝试先构建包,检查问题是否仍然存在。包中的导出在NAMESPACE 文件中定义。当您使用devtools::load_all 时,不会加载命名空间(请参阅here)。在手册Writing R extensions 中阅读有关此内容并构建包的更多信息。
您可能在 NAMESPACE 文件中使用了默认导出模式。检查它在你的包中,如果它看起来像这样:
exportPattern("^[^\\.]")
然后包从命名空间中导出不以点开头的所有内容。所以你要么叫它.x,要么把exportPattern()改成eg...
export(myfun1, myfun2)
从包中导出函数myfun1 和myfun2。通过明确定义要导出的内容,您可以避免在不需要时出现可用的内容。
【讨论】:
export(f,g)
source("test.R") 对其进行了测试,在此之前进行构建安装有点笨拙。
load_all 函数有一个 export_all 参数。
来自?load_all
如果为 TRUE(默认值),则导出所有对象。如果为 FALSE,则仅导出在 NAMESPACE 文件中列为导出的对象。
所以,请尝试在您的 load_all 通话中使用 export_all=FALSE。
【讨论】: