2010-01-29 106 views
26

我試圖改變R中包中的幾個命令的功能。查看命令的源代碼很簡單。但是該函數調用包名稱空間中的其他函數。這些功能不是導出對象。那麼我怎樣才能訪問它們?R:從命名空間調用函數

具體示例: 如何訪問copula :: rmvdc中使用的asCall()函數?

require(copula) 
copula::rmvdc 
getAnywhere("asCall") 

因此as.Call()存在於copula包中,但是如何訪問它?

> copula::asCall 
Error: 'asCall' is not an exported object from 'namespace:copula' 

回答

61

試試這個:

copula:::asCall 

這是previously answered on R-help。該函數未在包名稱空間中導出,因此您需要使用:::運算符。通常,功能在不用於一般用途時不會導出(例如,在這種情況下,您不需要記錄它們)。

+12

我簡直不敢相信......我試過系詞:asCall然後系詞:: asCall,然後說:「好hellifiknow」 – 2010-01-29 21:50:42

13

開發時,? assignInNamespace非常有用。

這允許您將一個非導出函數的新副本注入到包的名稱空間中。

這將是很好,如果R的錯誤信息更有幫助。相反的:

Error: 'matrixToPaths' is not an exported object from 'namespace:OpenMx' 

爲什麼不加:

You might try OpenMx:::matrixToPaths" 
+0

「爲什麼不添加...「,因爲你不應該訪問包的私有對象。這就是爲什麼他們被稱爲「私人」。事實上,人們可能會問爲什麼':::'運算符甚至存在。 – 2017-08-12 12:53:36

相關問題