获取功能的命名空间

时间:2014-10-03 07:13:12

标签: r namespaces

我正在开发一个包,我想在其中添加编辑历史记录。该包允许其他包注册用于编辑对象的函数。我正在寻找一种方法来记录注册用于编辑的功能的包的版本。

问题是:给定一个函数如何从导出的位置获取包?我的想法是调查其搜索路径,但search()仅报告当前环境的搜索路径,因此不报告函数,这是我需要的。

非常感谢任何指向其他方法的指示。

获取包的上下文是:

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

2 个答案:

答案 0 :(得分:3)

您可以使用getAnywhere例如,如果您要查找stringr函数str_locate的命名空间,则可以

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

只要stringr &#34;在搜索路径上可见,注册为S3方法或在命名空间中但未导出,这将有效。&#34; < / p>

结果是一个命名列表,您可以通过getAnywhere

查看names提供的内容
names(getAnywhere("str_locate"))
# [1] "name"    "objs"    "where"   "visible" "dups"  

答案 1 :(得分:2)

您可以使用:

environment(fun=someFunctionName)

它将返回作为参数传递的函数的环境,同时指定命名空间,即包名称。