我有一个包,当您调用initialize
函数时会生成一些函数。我在initialize()
的parent.frame
中创建了这些功能,我猜这是全球环境。我想模拟正常的包行为,允许您在加载后直接从包中调用函数,但在使用ls()
列出工作空间内容时无需查看这些函数。例如,在做暴露函数没有混乱ls()
library(ggplot2)
ls()
不返回geom_line
,geom_point
等,但你不必使用::
调用这些功能。他们暴露给用户,但不住在全球环境中。
有没有一种聪明的方法可以让我对initialize
的调用产生的函数做同样的事情,例如,通过定义zzz.r
和onLoad
或onAttach
挂钩中的环境或名称空间?我想过试图将函数环境设置为包名称空间,但似乎无法在加载后修改它。
编辑我正在使用的软件包在这里:https://github.com/mkoohafkan/arcpyr。 arcpy.initialize
函数使用PythonInR连接到Python,导入arcpy
包,然后为函数列表创建接口。今天晚些时候我会尝试创建一个简化的虚拟包。
得到旧的行为后面,我编辑的链接我的问题。今天晚些时候我会尝试创建一个更简单的版本。 – mikeck
以“。”开头的函数名称不会与'ls()'一起显示。如果其他软件包使用相同的技巧,不完全“聪明”,并不是很安全。 – Eric
为什么你需要动态创建这些功能?为什么不让它们存在于你的包名称空间中,但是如果Python尚未初始化,它们会抛出一个错误? – shadowtalker