2012-09-17 17 views
7

मैं अपने वर्तमान कार्यक्षेत्र में सभी कार्यों को ढूंढना चाहता हूं और उस उद्देश्य के लिए is.function का उपयोग करने के बारे में सोचा।वर्तमान कार्यक्षेत्र में सभी कार्यों को ढूंढना

"समस्या" है कि is.function एक सच्चे आर वस्तु, नहीं चरित्र स्ट्रिंग नाम एक वस्तु का उम्मीद है।

यह मेरा समाधान है, लेकिन 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 

उत्तर

8

कैसे के बारे में

lsf.str() 

जो सभी कार्यों को सूचीबद्ध करना चाहिए।

+0

+1 'lsf.str()' के लिए +1, उसे पहले नहीं पता था! ऐसा लगता है कि मैं वास्तव में एक ही लाइनर के साथ क्या कर रहा हूं: 'funs <- as.character (lsf.str()) '। आपका बहुत बहुत धन्यवाद! – Rappster

+0

@ रैप्स्टर, जो आप परिणाम के साथ करना चाहते हैं, उसके आधार पर 'as.character' का उपयोग करना आवश्यक नहीं हो सकता है, क्योंकि' lsf.str' अनिवार्य रूप से फ़ंक्शन नामों का एक चरित्र वेक्टर लौटाता है। यह सिर्फ इतना है कि ऑब्जेक्ट क्लास 'ls_str' है, जिसके लिए 'प्रिंट' विधि है। – BenBarnes

+0

ग्रेट, उस टिप्पणी के लिए धन्यवाद। – Rappster

1
funs <- sapply(wscontent, function(x) is.function(get(x))) 
+0

+ 1 मुझे अच्छे पुराने '() 'की याद दिलाने के लिए। धन्यवाद दोस्त! सूचकांक के लिए – Rappster

1

मैं एक समय पहले एक अधिक सामान्य खिलौना लिखा है:

lstype<-function(type='closure'){ 
inlist<-ls(.GlobalEnv) 
if (type=='function') type <-'closure' 
typelist<-sapply(sapply(inlist,get),typeof) 
return(names(typelist[typelist==type])) 
} 
+0

+1 धन्यवाद, मुझे यकीन है कि कुछ बिंदु पर आसान हो जाएगा! – Rappster

0

आप eapply उपयोग कर सकते हैं:

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

... या sapply as.list साथ:

which(sapply(as.list(.GlobalEnv), is.function)) 
संबंधित मुद्दे