2012-01-01 33 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