
Dear R-users,


three weeks ago I sent the mail below, but I didn't receive any 
response. Maybe it was overlooked.


Thanks anyway for all the help you gave us by this mailing-list,
Giancarlo Camarda

[...]

I have a matrix with a series of "not-overlapping in a row dimension" 
vectors in a given structure. Something like:


|a1,  0,  0,  0|

| 0, a2, a3,  0|

|a4,  0,  0, a5|


where "ai" are column-vectors of the equal length, m.


My aim is to construct a new matrix formed by diagonal matrices built by 
the mentioned vectors and placed following the original structure. 
Something like:


|diag(a1),        0,        0,        0|

|       0, diag(a2), diag(a3),        0|

|diag(a4),        0,        0, diag(a5)|


Of course the zeros are vectors of length m, and empty (m times m) 
matrices in the first and second scheme, respectively.


I found a way to obtain what I need by selecting an augmented version of 
the original matrix which I have constructed using the kronecker 
product. I was wondering whether there is a more elegant and 
straightforward procedure.


See below a simple reproducible example of my challenge in which the 
length of the vectors is 4.


Thanks in advance for your help,

Giancarlo Camarda



## size of the diagonal matrices

## or length of the vectors

m <- 4

## the original matrix

ze <- rep(0,m)

A <- cbind(c(1,2,3,4,ze,13,14,15,16),

  c(ze,5,6,7,8,ze),

  c(ze,9,10,11,12,ze),

  c(ze,ze,17,18,19,20))

## augmenting the original matrix

A1 <- kronecker(A, diag(m))

## which rows to select

w1 <- seq(1, m^2, length=m)

w2 <- seq(0, 2*m^2, by=m^2)

w0 <- outer(w1, w2, FUN="+")

w <- c(w0)

## final matrix

A2 <- A1[w,]










	[[alternative HTML version deleted]]

