我正在开发一个包,我希望在其中向对象添加编辑历史记录。该包允许其他包注册用于编辑对象的功能。我正在寻找一种方法来记录注册用于编辑的函数的包版本。
问题是:给定一个函数,你如何从它导出的地方获取包?我的想法是调查它的搜索路径,但是 search()
只报告当前环境的搜索路径,因此不报告我需要的函数。
非常感谢任何指向其他方法的指针。
获取包的上下文是这样的:
registerFunction <- function(fun) {
package <- getPackage(fun) ## This is what I need
version <- getPackageVersion(package)
register(fun, package, version)
}
最佳答案
您可以使用 getAnywhere
例如,如果您正在寻找 stringr
函数 str_locate
的命名空间,您可以这样做
getAnywhere("str_locate")$where
# [1] "package:stringr" "namespace:stringr"
只要 stringr
“在搜索路径上可见,注册为 S3 方法或在命名空间中但未导出,这将起作用。”
结果是一个命名列表,您可以通过 names
getAnywhere
中的可用内容
names(getAnywhere("str_locate"))
# [1] "name" "objs" "where" "visible" "dups"
关于r - 获取函数的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26174703/