暴露函数而不会混乱ls()

时间:2016-10-08 21:21:14

标签: r ggplot2

我有一个在调用initialize函数时生成一些函数的包。我在parent.frame的{​​{1}}中创建了这些函数,我猜这是全局环境。我想模拟正常的包行为,允许您在加载后直接从包中调用函数,但是在使用initialize()列出工作空间内容时无需查看这些函数。例如,做

ls()

不会返回library(ggplot2) ls() geom_line等,但您不必使用geom_point来调用这些功能。它们暴露给用户,但不会生活在全球环境中。

我是否有一种聪明的方法可以为调用::生成的函数执行相同的操作,例如通过在initializezzz.ronLoad挂钩中定义环境或命名空间?我想过尝试将函数环境设置为包命名空间,但似乎在加载后无法修改包命名空间。

编辑我正在处理的软件包在这里:https://github.com/mkoohafkan/arcpyronAttach函数使用PythonInR连接到Python,导入arcpy.initialize包,然后为函数列表创建接口。我今天晚些时候会尝试创建一个简化的虚拟包。

1 个答案:

答案 0 :(得分:0)

所以我最终找到了一个使用两种环境的解决方案(感谢@ssdecontrol!)和attach

f = new.env()                   # create the environment f
assign("foo", "bar", pos = f)   # create the variable foo inside f
ls()                            # lists f
ls(f)                           # lists foo
attach(f)                       # attach f to the current environment
foo                             # foo can now be accessed directly
## bar
ls()                            # but still only shows f
rm(f)                           # can even remove f
foo                             # and foo is still accessible
## bar

当然,attach使用some risks

redid arcpyr包使用环境代替,但你可以通过

来恢复旧行为
arcpy = arcpy_env()
attach(arcpy)