2012-01-01 31 views
32

我知道mvbutilsls("package:grid")find.funs("package:grid")但顯然他們都不可以發現,只訪問內部或與:::getAnywhere未導出的函數和方法。找到所有功能(包括私人)包

我不得不在源代碼包的/R目錄中找到文件,並在乾淨的全球環境中使用ls(),但必須有更好的方法,不是嗎?

+0

''get''和''getFromNamespace''似乎調用一個''.internal'',他們需要知道一個特定的名字,這並沒有什麼幫助。你的閱讀? – 2012-01-01 23:14:43

+0

什麼是''package:grid''中的一個特殊符號,在ls(package:grid)中沒有列出''但是期望? – 2012-01-01 23:18:32

+0

481其中,根據下面的解決方案'setdiff(unclass(lsf.str(envir = asNamespace(「grid」),all = T)),ls('package:grid'))' – baptiste 2012-01-02 00:30:32

回答

29

您可以使用asNamespace

> methods(cbind) 
[1] cbind.data.frame cbind.grobGrid cbind.ts*  

    Non-visible functions are asterisked 
> r <- unclass(lsf.str(envir = asNamespace("stats"), all = T)) 
> r[grep("cbind.ts", r)] 
[1] ".cbind.ts" "cbind.ts" 

cbind.tsstats包是不可見的,但可以在envir = asNamespace("stats")找到。

+0

整潔,謝謝。兩個答案都很好,但由於只有一個答案可以被接受,所以我會選擇單線。 – baptiste 2012-01-02 00:27:49

24

這似乎是perennial這裏的東西。

如果是這樣的俏皮話你以後那麼這應該是一個競爭者(信用@Joshua):

ls(getNamespace("grid"), all.names=TRUE) 

(鏈接是被要求後上述的問題,而是緊密有關)。

由於grid是一個基礎包,我還沒有上升到,R 3 ...我得到756層的功能與2.15.1版本。與unclass解決方案中的503比較。

+1

近期R中的'707'與'778';大多數setdiff似乎是內部的C例程('grid ::: L_textBounds')或常量('grid ::: Mb')。 – baptiste 2013-06-25 11:12:08