【问题标题】:Get namespace of function获取函数的命名空间
【发布时间】:2014-10-03 07:13:12
【问题描述】:

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

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

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

获取包的上下文是这样的:

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

【问题讨论】:

    标签: r namespaces


    【解决方案1】:

    您可以使用getAnywhere 例如,如果您正在寻找stringr 函数str_locate 的命名空间,您可以这样做

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

    只要stringr “在搜索路径上可见,注册为 S3 方法或在命名空间中但未导出,这将起作用。”

    结果是一个命名列表,您可以从getAnywherenames 看到可用的内容

    names(getAnywhere("str_locate"))
    # [1] "name"    "objs"    "where"   "visible" "dups"  
    

    【讨论】:

    • 你知道多个查找是否按它们在当前搜索路径上的位置排序吗?
    • 我查看了帮助文件,它很有帮助。我对搜索路径不正确。见?getAnywhere
    【解决方案2】:

    你可以使用:

    environment(fun=someFunctionName)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-29
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      • 2015-11-05
      相关资源
      最近更新 更多