我有一个包含大量功能的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()
我已导出两个函数,两者都存在于NAMESPACE文件中。
答案 0 :(得分:0)
使用::
或:::
功能的问题是只有功能代码被拉入工作区。因此mypackage
中的辅助或支持函数都没有被提取到解释器空间"中,即解释器可以看到的对象。所以你选择2"工作"而你的选择1失败了。对于我来说显而易见的原因。
当我攻击一个我知道的函数是从加载的命名空间派生的时候,我通常用以下内容完成黑客程序:
environment(hacked_fun) <- environment(orig_fun)
但是当您使用&#34;多冒号函数&#34;从磁盘中提取代码时,这不是一个选项。这也是经验丰富的R程序员在包中进行开发的一个主要原因。制作包的编码规则也支持定义包依赖。