2016-11-27 25 views
0

我有一個R函數包(全部被導出)。一個函數在運行時在內部調用另一個函數。但是,當我沒有加載整個包通過命名空間中運行該功能時,它拋出一個錯誤:「找不到功能..」從名字空間調用函數時找不到函數

對於e.g: foobar是兩種功能。 foo內部調用bar。但是當我通過名稱空間調用foomypackage::foo()時,它會引發錯誤could not find function "bar"。如果我首先加載庫並通過名稱空間運行,它將正常運行。

#doesnot work 
mypackage::foo() 
could not find function "bar" 
#works 
library(mypackage) 
mypackage::foo() 

我已經導出了這兩個函數,兩者都存在於NAMESPACE文件中。

回答

0

使用所述::::: FUC [nctions的問題是,只有功能代碼被拉入工作空間。因此,mypackage中沒有輔助功能或支持功能被拉入「解釋器空間」,即解釋器可以看到的對象。所以你選擇2「工作」,你的選擇1失敗。對我來說似乎是顯而易見的原因。

當我盜號的,我知道的是衍生自加載一個命名空間的功能,我一般完成盜號過程用:

environment(hacked_fun) <- environment(orig_fun) 

但是,當你從磁盤拉代碼這是不是一種選擇「多重冒號功能」。這也是經驗豐富的R程序員在軟件包中進行開發的主要原因。製作軟件包的編碼規範也支持定義軟件包相關性。

+0

有沒有解決方法?或者唯一的方法是通過不導出它來使這個'bar'函數成爲一個內部函數? – PoisonAlien

+0

您可以隨時查看函數的代碼並編輯副本以使用mypackage ::: other_func調用來獲得任何依賴關係。 –

相關問題