2014-10-03 132 views
3

我正在開發一個包,我希望將編輯歷史添加到對象。該軟件包允許其他軟件包註冊用於編輯該對象的功能。我正在尋找一種方法來記錄註冊用於編輯的功能的軟件包版本。獲取函數的名稱空間

問題是:給定一個函數,如何從導出的地方得到包?我的想法是調查其搜索路徑,但search()只報告當前環境的搜索路徑,因此不報告函數,這正是我需要的。

非常感謝任何其他方法的指針。

用於獲取包的背景是這樣的:

registerFunction <- function(fun) { 
    package <- getPackage(fun) ## This is what I need 
    version <- getPackageVersion(package) 
    register(fun, package, version) 
} 

回答

2

您可以使用getAnywhere例如,如果你正在尋找的命名空間爲stringr功能str_locate你可以做

getAnywhere("str_locate")$where 
# [1] "package:stringr" "namespace:stringr" 

這將工作,只要stringr「在搜索路徑中可見,註冊爲S3方法或在名稱空間中但未導出」。

結果是命名列表,你可以看看有什麼可以從getAnywherenames

names(getAnywhere("str_locate")) 
# [1] "name" "objs" "where" "visible" "dups" 
+0

您是否知道多個查找是否按當前搜索路徑的位置排序? – ThomasP85 2014-10-03 07:31:03

+0

我瀏覽過幫助文件,它非常有幫助。我對搜索路徑不正確。請參閱'?getAnywhere' – 2014-10-03 07:55:31

1

您可以使用:

environment(fun=someFunctionName) 

它將返回作爲傳遞函數的環境參數,同時指定名稱空間,即包名稱。