代码之家  ›  专栏  ›  技术社区  ›  Henrik

有没有一种方法可以得到一个向量,它具有所有在r中可以使用的函数的名称?

  •  20
  • Henrik  · 技术社区  · 15 年前

    我想要一个调用,它返回一个向量,其中包含我在当前r会话中可以调用的所有函数的名称。有人知道如何做到这一点吗?

    (我想对照这个向量检查用户输入的变量。我们在用户输入时遇到了一些不可预见的问题,例如, c 作为变量名)

    更新: 我想从当前加载的所有包中获取函数名。

    解决方案(中途): 根据Joris Meys的提示 lsf.str() 我想出了以下函数,它返回一个排序的向量,其中包含所有当前可用的函数名:

    getFunctionNames <- function() {
        loaded <- (.packages())
        loaded <- paste("package:", loaded, sep ="")
        return(sort(unlist(lapply(loaded, lsf.str))))
    }
    

    但是,在JorisMeys的帖子上也没有看到更好的答案。

    2 回复  |  直到 15 年前
        1
  •  20
  •   Rich Scriven    10 年前

    我会用 lsf.str() 作为开始。

    如: x <- as.character(lsf.str("package:base")) 提供基本包中所有函数的列表。您可以添加所有要检查的包。 stats utils 首先要记住。

    编辑:关于当前加载的包的问题:

    x<-unlist(sapply(search()[-1],函数(x)as.character(lsf.str(x))) 查看注释

    pkgs <- search()
    pkgs <- pkgs[grep("package:",pkgs)]
    y <- unlist(sapply(pkgs,lsf.str))
    

    就这样。

        2
  •  7
  •   Gavin Simpson    15 年前

    我在很多月前(2007年)问了一个关于R-HELP的类似问题,Brian Ripley教授提供了一个解决方案:

    findfuns <- function(x) {
         if(require(x, character.only=TRUE)) {
            env <- paste("package", x, sep=":")
            nm <- ls(env, all=TRUE)
            nm[unlist(lapply(nm, function(n) exists(n, where=env,
                                                   mode="function",
                                                   inherits=FALSE)))]
         } else character(0)
    }
    pkgs <- dir(.Library)
    z <-  lapply(pkgs, findfuns)
    names(z) <- pkgs
    Z <- sort(unique(unlist(z)))
    

    其输出如下:

    > head(Z)
    [1] "^"        "-"        "-.Date"   "-.POSIXt" ":"        "::"
    

    这是为了查找由对象指定的包中的所有函数。 pkgs 因此,您可以控制加载/检查哪些包。

    对当前加载的包集有效的修改版本为:

    findfuns2 <- function(pkgs) {
        nm <- ls(pkgs, all = TRUE)
        nm[unlist(lapply(nm, function(n) exists(n, where = pkgs,
                                                mode = "function",
                                                inherits = FALSE)))]
        if(isTRUE(all.equal(length(nm), 0)))
            character(0)
        else
            nm
    }
    
    pkgs <- search()
    pkgs <- pkgs[grep("package:", pkgs)]
    z <- lapply(pkgs, findfuns2)
    z <- sort(unique(unlist(z)))
    head(z)
    
    推荐文章