2013-05-17 14 views
5

के स्तंभों मैं pmax उपयोग करने के लिए एक मैट्रिक्स A की पंक्ति-वार maximium गणना करने के लिए चाहते से Pmax के निर्माण करने के लिए:कैसे एक समारोह कॉल एक मैट्रिक्स

A = matrix(sample(1:20),10,2) 
pmax(A[,1],A[,2]) 

इस ठीक काम करता है। लेकिन समस्या यह है कि मुझे ए के आकार को नहीं पता है, इसलिए pmax पर कॉल कॉलम द्वारा मैट्रिक्स को विभाजित करने और प्रत्येक कॉलम को तर्क के रूप में आपूर्ति करने में सक्षम होना चाहिए। उसको कैसे करे? उदाहरण के लिए, मैं अगले उदाहरण में हो सकता है

A = matrix(sample(1:20),5,4) 

है लेकिन मैं हाथ से

pmax(A[,1],A[,2],A[,3],A[,4]) 
वास्तव में

के लिए हर समय को फिर से लिखने के लिए है नहीं करना चाहती, मैं नहीं कर सकता क्योंकि के आकार कार्यक्रम की शुरुआत से पहले A अज्ञात है।

उत्तर

7

का उपयोग आप do.call उपयोग कर सकते हैं:

do.call(pmax, as.data.frame(A)) 
+0

उत्कृष्ट। धन्यवाद! –

+0

@FlorianOswald यह ध्यान दिया जाना चाहिए कि जब आपके पास पंक्तियां >> कॉलम हों, और जब आपके पास कॉलम >> पंक्तियां हों, तो 'लागू' उपयोग की तुलना में धीमे हो जाएंगे जो मैट्रिस के साथ काम करने के लिए डिज़ाइन किया गया है। –

+0

@ साइमन ओ 101 हां, मैंने ध्यान दिया है कि धन्यवाद! –

2

बस max बजाय साथ apply ...

apply(A , 1 , max) 
# [1] 6 11 20 18 17 

pmax(A[,1],A[,2],A[,3],A[,4]) 
# [1] 6 11 20 18 17 
+0

मैं क्योंकि प्रदर्शन के कारणों के लागू बचना चाहते हैं। मैं इसे एक बहुत बड़े मैट्रिक्स पर करता हूं। मैंने 'आवेदन' के विकल्प के लिए एक आरपीपीएआरडमिलो फ़ंक्शन लिखा है और यह 18 गुना तेज है। अब 'pmax' के खिलाफ बेंचमार्क करना चाहता था। मुझे पता है कि सी कोड 3 गुना तेज है, लेकिन 'pmax'' na.rm 'करने में सक्षम है जिसे मुझे सी में अलग से करना है। यही वह जगह है जहां से मैं आ रहा हूं। –

+0

सी कोड से तेज़? खैर, मैंने कोशिश की है: यह नहीं है। (यह बहुत धीमा है)। –

संबंधित मुद्दे