8

我想在我当前的工作空间中找到所有功能,并考虑is.function用于此目的。

“问题”是is.function需要一个真正的 R object,而不是对象的字符串名称

这是我的解决方案,但使用eval(substitute(...))似乎有点涉及。关于更直接的方式的任何想法,或者这是唯一可以做到的方式?

示例内容

x <- TRUE
y <- 10
foo1 <- function() message("hello world!")
foo2 <- function() message("hello world again!")

查找所有函数对象

wscontent <- ls(all.names=TRUE)
funs <- sapply(wscontent, function(ii) {
    eval(substitute(is.function(OBJ), list(OBJ=as.name(ii))))
})
> funs
     foo1      foo2      funs wscontent         x         y 
     TRUE      TRUE     FALSE     FALSE     FALSE     FALSE 
4

4 回答 4

11

怎么样

lsf.str()

这应该列出所有功能。

于 2012-09-17T08:32:30.563 回答
1

您可以使用 eapply:

which(unlist(eapply(.GlobalEnv, is.function)))

...或使用 as.list 应用:

which(sapply(as.list(.GlobalEnv), is.function))
于 2013-09-20T08:33:45.037 回答
1
funs <- sapply(wscontent, function(x) is.function(get(x)))
于 2012-09-17T08:31:13.217 回答
1

不久前我写了一个更通用的玩具:

lstype<-function(type='closure'){
inlist<-ls(.GlobalEnv)
if (type=='function') type <-'closure'
typelist<-sapply(sapply(inlist,get),typeof)
return(names(typelist[typelist==type]))
}
于 2012-09-17T12:01:13.383 回答