2013-07-05 7 views
15

क्या आर ब्लॉक-विकर्ण आकार में मैट्रिस को बांधने के लिए आधार कार्य करता है?matrices के ब्लॉक-विकर्ण बाध्यकारी

निम्नलिखित काम करता है, लेकिन मैं अगर वहाँ एक मानक तरीका है पता करने के लिए करना चाहते हैं:

a <- matrix(1:6, 2, 3) 
b <- matrix(7:10, 2, 2) 

rbind(cbind(a, matrix(0, nrow=nrow(a), ncol=ncol(b))), 
     cbind(matrix(0, nrow=nrow(b), ncol=ncol(a)), b)) 

#  [,1] [,2] [,3] [,4] [,5] 
#[1,] 1 3 5 0 0 
#[2,] 2 4 6 0 0 
#[3,] 0 0 0 7 9 
#[4,] 0 0 0 8 10 

उत्तर

17

एक पैकेज करता magic तुम क्या चाहते से adiag:

library(magic) 
adiag(a,b) 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 3 5 0 0 
[2,] 2 4 6 0 0 
[3,] 0 0 0 7 9 
[4,] 0 0 0 8 10 

वैकल्पिक रूप से, आप एक पैकेज Matrix का उपयोग कर सकते हैं और bdiag

library(Matrix) 
bdiag(a,b) 
4 x 5 sparse Matrix of class "dgCMatrix" 

[1,] 1 3 5 . . 
[2,] 2 4 6 . . 
[3,] . . . 7 9 
[4,] . . . 8 10 

जो एक स्पैर मैट्रिक्स देता है और जो अधिक कुशल हो सकता है। नियमित रूप से प्राप्त करने के लिए as.matrix(bdiag(a,b)) का उपयोग करें।

+1

'adiag' के लिए जोड़ना कि यदि आपकी मैट्रिक्स किसी सूची में संग्रहीत हैं (उदाहरण के लिए 'lst <-list (a, b)'), तो आपको' घटाएं (adiag, lst) 'का उपयोग करने की आवश्यकता होगी क्योंकि यह' प्रतीत होता है कि सूची को मूल रूप से कैसे पार्स करना है – MichaelChirico

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