如何定义包中的哪些变量或函数被导出

And*_*eas 5 namespaces export r devtools package

我的R包使用内部变量x.如果我加载包(我只尝试使用devtools::load_all),然后x没有出现在ls()列表中,但它确实有一个值.我怎么能避免这个?

我很好,用户可以使用myPackage::x但不是简单地访问变量x.

GSe*_*See 8

load_all函数有一个export_all参数.

?load_all

如果为TRUE(默认值),则导出所有对象.如果为FALSE,则仅导出在NAMESPACE文件中列为导出的对象.

所以,试着export_all=FALSE在你的load_all电话中使用.


Jor*_*eys 5

首先尝试构建软件包,然后检查问题是否仍然存在。包的导出在NAMESPACE文件中定义。使用时devtools::load_all,不会加载名称空间(请参见此处)。在手册Writing R扩展中阅读有关此内容和构建软件包的更多信息。

您可能在NAMESPACE文件中使用默认的导出模式。检查它在您的包裹,并且是否看起来像这样:

exportPattern("^[^\\.]")
Run Code Online (Sandbox Code Playgroud)

然后,程序包将从名称空间中不以点开头的所有内容导出。因此,您可以调用它.x,也可以将其更改exportPattern()为例如...

export(myfun1, myfun2) 
Run Code Online (Sandbox Code Playgroud)

导出功能myfun1myfun2从包中导出。通过明确定义要导出的内容,可以避免在不需要时可用的内容。