给定一个函数,你如何确定它来自哪个命名空间?
例如,如果我在命令提示符下键入mean.default
,则输出包括它在基本包中的事实。我希望能够做getNamespace(mean.default)
这样的事情并让它返回“base”(或实际的基础环境)。
有一个getNamespace
函数,但似乎只接受包名而不是函数名。
print.function
使用内部代码来检索命名空间。我在do_printfunction
中浏览src/main/print.c
,但随后放弃了。
答案 0 :(得分:34)
我最近了解到find()
似乎就是这样做的。
R> find("ls")
[1] "package:base"
R> find("na.locf")
[1] "package:zoo"
答案 1 :(得分:14)
findFunction
是另一种选择,?findFunction
表示您应该使用find
代替mode="function"
。 findFunction
的结果是函数的可见版本所在的环境列表。
答案 2 :(得分:12)
您想要getNamespaceName
+ environment
:
getNamespaceName(environment(mean.default))
# [1] "base"
答案 3 :(得分:1)
此函数搜索已加载的命名空间和全局环境中的函数:
getEnvName <- function(f) {
attached <- c(environmentName(.GlobalEnv), loadedNamespaces())
envs <- c(.GlobalEnv, lapply(attached[-1], .getNamespace))
attached[vapply(envs, function(env) exists(f, env, inherits = FALSE), logical(1))]
}
median <- function() {}
getEnvName("median")
#> [1] "R_GlobalEnv" "stats"
getEnvName(".try_quietly")
#> [1] "tools"
getEnvName("getEnvName")
#> [1] "R_GlobalEnv"
答案 4 :(得分:0)
getNamespaceName()
无效。
以下内容确实存在:
environmentName(findFunction(f = "str_detect",
where = getNamespace("stringr"))[[1]])
根据需要设置where
参数。其documentation:
从中搜索对象的环境,名称空间或搜索列表位置。默认情况下,从调用函数的顶级环境开始,通常是全局环境(即,使用搜索列表),或调用来自的程序包的名称空间。间接调用任何这些函数时,提供此参数很重要。对于包名称空间,此类调用中的默认值很可能是错误的。