首页 文章

你如何确定函数的命名空间?

提问于
浏览
33

给定一个函数,您如何确定它来自哪个命名空间?

例如,如果我在命令提示符下键入 mean.default ,则输出包括它在基本包中的事实 . 我希望能够做 getNamespace(mean.default) 这样的事情并让它返回"base"(或实际的基础环境) .

有一个 getNamespace 函数,但似乎只接受包名而不是函数名 .

print.function 使用内部代码检索命名空间 . 我在 src/main/print.c 浏览 do_printfunction 然后放弃了 .

4 回答

  • 33

    我最近才了解 find() ,这似乎就是这样做的 .

    R> find("ls")
    [1] "package:base"
    R> find("na.locf")
    [1] "package:zoo"
    
  • 12

    你想 getNamespaceName environment

    getNamespaceName(environment(mean.default))
    # [1] "base"
    
  • 1

    findFunction 是另一个选项, ?findFunction 表示你应该用它来代替 findmode="function" . findFunction 的结果是函数的可见版本所在的环境列表 .

  • 14

    此函数搜索加载的命名空间和全局环境中的函数:

    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"
    

相关问题