आर

2017-05-24 4 views
6

में एक FUN इनपुट के साथ एक फ़ंक्शन बनाना मैं एक ऐसा फ़ंक्शन बनाना चाहता हूं जहां उपयोगकर्ता अपने मॉडल चयन फ़ंक्शन को इनपुट के रूप में दर्ज कर सके। मुझे जवाब खोजने में परेशानी हो रही है क्योंकि मैं एक साधारण आर फ़ंक्शन बनाने के तरीके के बारे में खोज परिणाम प्राप्त करता हूं, क्योंकि लागू परिवार की तरह इनपुट के विपरीत।आर

यहाँ लेकिन मैं के लिए क्या देख रहा हूँ के लिए इसी तरह काफी नहीं एक उदाहरण है:

simple<- function(mod, FUN){ 
    switch(FUN, 
     AIC = AIC(mod), 
     BIC = BIC(mod)) 
} 
simple(lm(rnorm(100) ~ rnorm(100,4)), "AIC") 

ऊपर कोड रन लेकिन मैं संभव कार्यों के सभी के लिए योजना बनाने और उन्हें स्विच भीतर लिखना चाहिए। मुझे एआईसी के विरोध में "एआईसी" लिखने के लिए भी मजबूर होना पड़ता है।

कोई विचार है कि मैं जिस फ़ंक्शन को ढूंढ रहा हूं, उसे बनाने के लिए कोई विचार है? अगर आपको अतिरिक्त जानकारी चाहिए तो मुझे बताएं।

+2

मुझे लगता है कि आप 'match.fun लिए देख रहे हैं()'। – joran

उत्तर

8

कुछ इस तरह:

simple<- function(mod, FUN){ 
    FUN <- match.fun(FUN) 
    FUN(mod) 
} 

simple(lm(rnorm(100) ~ rnorm(100,4)),FUN = "BIC") 

match.fun एक समारोह, प्रतीक या वर्ण को स्वीकार करता है, इसलिए वहाँ कैसे FUN तर्क पारित हो जाता है में कुछ लचीलापन है।

अनेक कार्यों का पारित करने के लिए एक विकल्प, टिप्पणी में उल्लेख किया:

simple <- function(mod, FUN){ 
    FUNS <- lapply(FUN,match.fun) 
    lapply(FUNS,function(fun) fun(mod)) 
} 
+0

हां यह वही है जो मैं ढूंढ रहा हूं। यह बीआईसी के साथ काम करता है जो मैं देख रहा था। बहुत सराहना। जल्द ही उत्तर दिया जाएगा। भविष्य में समस्या को हल करने के लिए –

+3

@EvanFriedland युक्ति: आप सही ढंग से जानते थे कि आप कुछ ऐसा करना चाहते थे जैसे * लागू कार्य करें। 'Lapply' टाइप करें,' sapply', कंसोल पर 'लागू करें' और उन कार्यों की पहली पंक्ति को देखें। ;) – joran

+0

@ जोरान, लेकिन इस मामले में, आप एक समय में केवल एक मजेदार पास कर सकते हैं .. या तो "एआईसी" या "बीआईसी", अगर मुझे 'FUN = c ("एआईसी", "बीआईसी' ")'? मैंने कोशिश की और त्रुटि मिली। –