[R] Split matrix into square submatices

xiddw xiDDdw at gmail.com
Fri Feb 10 09:02:25 CET 2012


Hi everybody, 

I'm looking for an optimal way to split  a big matrix  (e.g. ncol = 8,
nrow=8)  into small square submatrices  (e.g. ncol=2, nrow=2)

For example

If I have 

>  h
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    9   17   25   33   41   49   57
[2,]    2   10   18   26   34   42   50   58
[3,]    3   11   19   27   35   43   51   59
[4,]    4   12   20   28   36   44   52   60
[5,]    5   13   21   29   37   45   53   61
[6,]    6   14   22   30   38   46   54   62
[7,]    7   15   23   31   39   47   55   63
[8,]    8   16   24   32   40   48   56   64

and I want to split matriz h into 16 small submatrices:

> g[1]
     [,1] [,2]
[1,]    1    9
[2,]    2   10

> g[2]
     [,1] [,2]
[1,]   17   25
[2,]   18   26

...

> g[4]
     [,1] [,2]
[1,]   49   57
[2,]   50   58

...

> g[16]
     [,1] [,2]
[1,]   55   63
[2,]   56   64

Always the big matrix would be a square matrix and also would have a nrow
and ncol in order of  a power of two, so it always could  be splitted in at
least halves. 

Until now, I'm able to split a matrix but keeping the number of original
matrix columns.

I mean, if I want to split into 16 submatrices, using the following command
what I get its 4 lists: 
But I haven't found a way to split resultant lists in order to get 4
matrices for each list.

> g <- split(as.data.frame(h), (1:4))
> g
$`1`
  V1 V2 V3 V4 V5 V6 V7 V8
1  1  9 17 25 33 41 49 57
5  5 13 21 29 37 45 53 61

$`2`
  V1 V2 V3 V4 V5 V6 V7 V8
2  2 10 18 26 34 42 50 58
6  6 14 22 30 38 46 54 62

$`3`
  V1 V2 V3 V4 V5 V6 V7 V8
3  3 11 19 27 35 43 51 59
7  7 15 23 31 39 47 55 63

$`4`
  V1 V2 V3 V4 V5 V6 V7 V8
4  4 12 20 28 36 44 52 60
8  8 16 24 32 40 48 56 64


I would appreciate any hint. Thanks.

--
View this message in context: http://r.789695.n4.nabble.com/Split-matrix-into-square-submatices-tp4375563p4375563.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list