我想有一个调用,它返回一个向量,其中包含我可以在当前R会话中调用的所有函数的名称.有谁知道如何实现这一目标?
(我想检查用户输入的变量对这个向量.我们有一些不可预知的问题,用户输入,例如,c作为变量名称)
更新:我想从当前加载的所有包中获取函数名称.
解决方案(中途):基于Joris Meys提示,lsf.str()我想出了以下函数,该函数返回一个带有所有当前可用函数名的有序向量:
getFunctionNames <- function() {
loaded <- (.packages())
loaded <- paste("package:", loaded, sep ="")
return(sort(unlist(lapply(loaded, lsf.str))))
}
Run Code Online (Sandbox Code Playgroud)
不要再看Joris Meys发表的评论,以获得更好的答案.
Jor*_*eys 20
我用它lsf.str()作为开始.
例如:x <- as.character(lsf.str("package:base"))给出基础包中所有功能的列表.您可以添加要检查的所有包.stats并utils首先想到.
编辑:关于您当前加载的包的问题:
x < - unlist(sapply(search()[ - 1],function(x)as.character(lsf.str(x)))) 参见注释
pkgs <- search()
pkgs <- pkgs[grep("package:",pkgs)]
y <- unlist(sapply(pkgs,lsf.str))
Run Code Online (Sandbox Code Playgroud)
诀窍.
许多月前(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)))
Run Code Online (Sandbox Code Playgroud)
这给出了如下输出:
> head(Z)
[1] "^" "-" "-.Date" "-.POSIXt" ":" "::"
Run Code Online (Sandbox Code Playgroud)
这是为了查找object指定的包中的所有函数,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)
Run Code Online (Sandbox Code Playgroud)