我正在开发一个包,我希望在其中向对象添加编辑历史记录。该包允许其他包注册用于编辑对象的函数。我正在寻找一种方法来记录注册用于编辑的函数的包的版本。
问题是:给定一个函数,如何从导出的位置获取包?我的想法是研究它的搜索路径,但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)
您可以使用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)