[R] inserting rows into a matrix

Robin Hankin r.hankin at noc.soton.ac.uk
Thu Jul 27 15:54:02 CEST 2006


Hi


I have a little vector function that takes a vector A of strictly  
positive integers
and outputs a matrix M  each of whose columns is the vector, modified in
a complicated combinatorical way.

Now I want to generalize the function so that A can include zeroes.   
Given A,
I want to strip out the zeroes, pass it to my function, and pad  M
  with rows at positions corresponding to the zeroes of A.

Commented, minimal, self-contained, reproducible toy example follows.


f <- function(a){cbind(a,a+1,rev(a))}  #real function a ghastly  
nightmare

  A <- 1:5
  f(A)
      a
[1,] 1 2 5
[2,] 2 3 4
[3,] 3 4 3
[4,] 4 5 2
[5,] 5 6 1


# f() works as desired.

# Now introduce A2, that includes zeroes.  In my application, f(A2)  
would fail
because of the zeroes.

A2 <- c(1,0,0,2,4,0,3)

I can strip the zeroes out and call f():
  f(A2[A2>0])
      a
[1,] 1 2 3
[2,] 2 3 4
[3,] 4 5 2
[4,] 3 4 1

which is fine.  How to put the zeroes back in in the appropriate rows
and get the following:

 > cbind(c(1,0,0,2,4,0,3),c(2,0,0,3,5,0,4),c(3,0,0,4,2,0,1))
      [,1] [,2] [,3]
[1,]    1    2    3
[2,]    0    0    0
[3,]    0    0    0
[4,]    2    3    4
[5,]    4    5    2
[6,]    0    0    0
[7,]    3    4    1
 >



anyone?



--
Robin Hankin
Uncertainty Analyst
National Oceanography Centre, Southampton
European Way, Southampton SO14 3ZH, UK
  tel  023-8059-7743



More information about the R-help mailing list