8

is.function現在のワークスペースですべての関数を見つけて、その目的で使用することを考えています。

「問題」は、オブジェクトの文字列is.functionではなく、真のRオブジェクトを予期していることです。

それが私の解決策ですが、使用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
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 に答える
1

あなたはeapplyを使うことができます:

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

...またはas.listでsapply:

which(sapply(as.list(.GlobalEnv), is.function))
于 2013-09-20T08:33:45.037 に答える