【问题标题】:find all functions (including private) in a package查找包中的所有函数(包括私有函数)
【发布时间】:2012-01-01 22:59:14
【问题描述】:

我知道mvbutils 中的ls("package:grid")find.funs("package:grid"),但显然他们都找不到只能在内部或:::getAnywhere 访问的非导出函数和方法。

我不得不在源包的/R 目录中获取文件,并在干净的全局环境中使用ls(),但必须有更好的方法,不是吗?

【问题讨论】:

  • getgetFromNamespace 似乎调用了.internal,并且他们需要知道一个特定的名称,这并没有多大帮助。你读的那个?
  • package:grid 中您没有在ls(package:grid) 中看到但期望出现的特定符号是什么?
  • 481个,根据下面的解决方案setdiff(unclass(lsf.str(envir = asNamespace("grid"), all = T)), ls('package:grid'))

标签: r


【解决方案1】:

你可以使用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" 

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

【讨论】:

  • 很好,谢谢。两个答案都很好,但由于只能接受一个,我会选择单行。
  • ls(asNamespace("stats")) 也可以在向量中给出你想要的。
【解决方案2】:

这里好像是perennial

如果你追求的是这个单行,那么这应该是一个竞争者(信用@Joshua):

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

(链接是在上述之后提出的一个问题,但密切相关)。

由于grid 是一个基础包,我还没有升级到R 3...我在 2.15.1 版本中获得了 756 个函数。与 unclass 解决方案中的 503 相比。

【讨论】:

  • 707 vs 778 在最近的 R 中;大多数 setdiff 似乎是内部 C 例程 (grid:::L_textBounds) 或常量 (grid:::Mb)。
猜你喜欢
  • 2018-07-05
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多