2012-08-14 7 views
16

के साथ बाहरी() का उपयोग करना मान लीजिए कि आपके पास f<- function(x,y,z) { ... } फ़ंक्शन है। आप एक तर्क के निरंतर पारित होने के बारे में कैसे जाएंगे, लेकिन दूसरे को अलग-अलग करने दें? दूसरे शब्दों में, मैं कुछ इस तरह करना चाहते हैं:एक बहुविकल्पीय फ़ंक्शन

output <- outer(x,y,f(x,y,z=2)) 

इस कोड का मूल्यांकन नहीं करता है, लेकिन वहाँ यह करने के लिए एक तरीका है?

+1

तुम्हें पता है क्या, मुझे एहसास हुआ मैं अक्सर 'do.call (lapply, ग (expand.grid (एक्स, वाई), सूची (च)))' के साथ बात की इस तरह कर रहा हूँ, लेकिन 'बाहरी 'निश्चित रूप से बेहतर और अधिक पठनीय है। – Backlin

उत्तर

18
outer(x, y, f, z=2) 

समारोह के बाद तर्क अतिरिक्त तर्क यह करने के लिए, ?outer में ... देख रहे हैं। यह वाक्यविन्यास आर में बहुत आम है, पूरे apply परिवार उदाहरण के लिए समान कार्य करता है।

अद्यतन:

मैं नहीं बता सकते कि तुम क्या अपने अनुवर्ती अप सवाल में पूरा करने के लिए चाहते हैं, लेकिन लगता है कि इस फार्म पर एक समाधान शायद आप क्या इस्तेमाल करना चाहिए है।

outer(sigma_int, theta_int, function(s,t) 
    dmvnorm(y, rep(0, n), y_mat(n, lambda, t, s))) 

यह sigma_int और theta_int में मूल्यों के प्रत्येक संयोजन के लिए एक विचरण मैट्रिक्स की गणना करता है, का उपयोग करता है मैट्रिक्स एक dennsity परिभाषित करने के लिए और बिंदु (रों) y में परिभाषित में यह मूल्यांकन करता है। मैं इसका परीक्षण करने में सक्षम नहीं हूं हालांकि मुझे शामिल चर के प्रकारों और आयामों को नहीं पता है।

+0

आह यह इतना आसान है, मुझे आर के बारे में जानने के लिए बहुत कुछ है ... धन्यवाद बहुत! – Stijn

+0

हां, यह आसान है ... एक बार जब आप इसे जानते हैं;) – Backlin

+0

आपको फिर से परेशान करने के लिए खेद है, लेकिन अगर मेरे पास कोई ऐसा फ़ंक्शन है जो किसी अन्य फ़ंक्शन पर निर्भर है? उदाहरण के लिए, कहें कि मेरे पास दो अंतराल हैं, और इन अंतराल में से प्रत्येक दो तत्वों के लिए मैं (i) एक संबंधित भिन्नता मैट्रिक्स बनाना चाहता हूं और (ii) इस बिंदु पर घनत्व की गणना (एक बहुविकल्पीय सामान्य वितरण)। भिन्नता मैट्रिक्स बनाने के लिए मेरे पास एक फ़ंक्शन y_mat (n, lambda, theta, सिग्मा) है। दो अंतराल को sigma_int और theta_int दिया गया है, मैं z <- outer (sigma_int, theta_int, dmvnorm, x = y, mean = rep (0, n), सिग्मा = y_mat (n, lambda, theta, सिग्मा) जैसे कुछ करना चाहता हूं)। क्या यह संभव है? – Stijn

2

outer (फ़ंक्शंस और अन्य लोगों के लागू परिवार के साथ) उन कार्यों के अतिरिक्त तर्क के साथ पास होंगे जो वे कहते हैं। हालांकि, अगर आप ऐसे मामले से निपट रहे हैं जहां यह समर्थित नहीं है (optim एक उदाहरण है), तो आप करी के अधिक सामान्य दृष्टिकोण का उपयोग कर सकते हैं। फ़ंक्शन को करी करने के लिए एक नया फ़ंक्शन बनाना है जिसमें कुछ (निश्चित) चर तय किए गए हैं और इसलिए कम पैरामीटर हैं।

library("functional") 
output <- outer(x,y,Curry(f,z=2)) 
संबंधित मुद्दे