我有一个带有一堆功能的R软件包(全部都导出)。该功能之一在运行时内部呼叫另一个函数。但是,当我通过名称空间运行此功能而不加载整个软件包时,它会引发错误:'无法找到功能。'
例如: foo
和bar
是两个功能。foo
内部调用bar
。但是,当我通过名称空间调用foo
时,mypackage::foo()
会引发错误could not find function "bar"
。如果我首先加载库并通过名称空间运行,则可以正常运行。
#doesnot work
mypackage::foo()
could not find function "bar"
#works
library(mypackage)
mypackage::foo()
我已经导出了两个功能,并且两者都存在于命名空间文件中。
使用 ::
或 :::
fuc [nctions nctions是只将功能代码拉到工作区中。因此,在mypackage
中,没有任何辅助或支持功能都被拉入"解释器空间",即解释器可以看到的对象。因此,您选择2" Works",并且您的选项1失败。在我看来是显而易见的原因。
当我黑客入侵我知道的函数时,我知道 loaded a名称空间时,我通常会用:
完成黑客入侵过程 environment(hacked_fun) <- environment(orig_fun)
但是,当您使用"多彩功能"从磁盘上拉代码时,这不是一个选择。这也是经验丰富的R ProgramMmer在包装方面开发的主要原因。制作软件包的编码学科还支持定义软件包依赖项。