我正在开发一个包,我想在其中添加编辑历史记录。该包允许其他包注册用于编辑对象的函数。我正在寻找一种方法来记录注册用于编辑的功能的包的版本。
问题是:给定一个函数如何从导出的位置获取包?我的想法是调查其搜索路径,但search()
仅报告当前环境的搜索路径,因此不报告函数,这是我需要的。
非常感谢任何指向其他方法的指示。
获取包的上下文是:
registerFunction <- function(fun) {
package <- getPackage(fun) ## This is what I need
version <- getPackageVersion(package)
register(fun, package, version)
}
答案 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)
它将返回作为参数传递的函数的环境,同时指定命名空间,即包名称。