获取函数的命名空间

Tho*_*P85 3 namespaces r

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

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

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

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

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

Ric*_*ven 5

您可以使用getAnywhere 例如,如果您正在寻找您可以执行的stringr函数的名称空间str_locate

getAnywhere("str_locate")$where
# [1] "package:stringr"   "namespace:stringr"
Run Code Online (Sandbox Code Playgroud)

只要“在搜索路径上可见、注册为 S3 方法或在命名空间中但未导出”,此功能就stringr有效。

结果是一个命名列表,您可以getAnywhere通过以下命令查看可用内容names

names(getAnywhere("str_locate"))
# [1] "name"    "objs"    "where"   "visible" "dups"  
Run Code Online (Sandbox Code Playgroud)