2012-05-11 15 views
6

可能重複:
How do you you determine the namespace of a function?一個包中的R給定函數的名稱

我不知道如何做到這一點?你怎麼知道包名對於R中的某個函數?我想要一個給定函數名稱的函數,返回擁有它的包的名稱。任何建議?

+0

@Andrie很好看。鑑於所有軟件包現在都有一個命名空間,hadley在你連接的Q&A中的回答讓我覺得是最好的解決方案。 –

+0

@GavinSimpson:爲什麼比'findFunction'好? (我試圖想象給學生解釋爲什麼他們應該使用'getNamespaceName(environment(foo))'而不是'findFunction(foo)' - 前者似乎有點神奇,如果它沒有顯着優點...) –

+1

@BenBolker find()'&'findFunction()'不要返回*只是*名稱空間(因此包)名稱。其結果需要進一步處理。哈德利只是將包名稱作爲角色返回。我可能更喜歡用於編寫函數或編程,但對於用戶代碼,其他人都可以。 –

回答

6

可能有更好的解決方案,但find("functionname")似乎工作得很好?但是,它只適用於加載的包。

> find("strwidth") 
[1] "package:graphics" 
> find("qplot") 
character(0) 
> library(ggplot2) 
> find("qplot") 
[1] "package:ggplot2" 
> 

(如果需要包裝的原始名稱可以使用gsub("^package:","",results)

(由Andrie聯繫前面的問題的答案包括這樣的回答,他們不給一點關於gsub,他們似乎都沒有分享尋找無負載包的問題)

這裏有一個快速的黑客發現的功能,即使在無負載包:

findAllFun <- function(f) { 
    h <- help.search(paste0("^",f,"$"),agrep=FALSE) 
    h$matches[,"Package"] 
} 

findAllFun("qplot") 
## "ggplot2" 
findAllFun("lambertW") 
## "emdbook" "VGAM" 
> findAllFun("xYplot") 
## "Hmisc" "lattice" 

如果您需要在非安裝的包中找到功能。搜索CRAN),然後findFnsos包將是你的朋友。

+0

和那些沒有加載的軟件包呢? – Nestorghh

相關問題