[R] inserting rows into a matrix
Robin Hankin
r.hankin at noc.soton.ac.uk
Thu Jul 27 16:42:46 CEST 2006
Gabor, Christos
great, two elegant vectorized solutions. I spent quite a long time
trying to generalize my f() to accept zeroes with no luck (long
story), so either of these solutions is fine.
TDH [this *did* help]
rksh
On 27 Jul 2006, at 15:34, Christos Hatzis wrote:
> Hi Robin,
>
> Ok. I see. Try this then:
>
> f <- function(a){if( any(a==0) ) stop("Zeros in input vector") else
> cbind(a,a+1,rev(a))}
> a2 <- c(1,0,0,2,4,0,3)
>
> f(a2) # error message
>
> f2 <- function(a) {
> indx.zero <- which(a==0)
> indx.nz <- (1:length(a))[-indx.zero]
>
> x <- f(a[indx.nz])
> xx <- matrix(NA,length(a),ncol(x))
> xx[ indx.zero, ] <- rep(0,ncol(x))
> xx[ indx.nz, ] <- x
> xx
> }
>
>> f2(a2)
> [,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
>
> -Christos
>
> -----Original Message-----
> From: Robin Hankin [mailto:r.hankin at noc.soton.ac.uk]
> Sent: Thursday, July 27, 2006 10:16 AM
> To: christos at nuverabio.com
> Cc: 'Robin Hankin'; 'RHelp'
> Subject: Re: [R] inserting rows into a matrix
>
> Hi Christos
>
> thanks for this, but it won't work because in my application
> f(A2) will fail if there are any zeroes in A2.
>
>
> cheers
>
> rksh
>
>
> On 27 Jul 2006, at 15:10, Christos Hatzis wrote:
>
>> This is not as elegant, but should work:
>>
>> a3 <- f(A2)
>> a3[ which( apply(a3,1,prod) == 0 ), ] <- rep(0,ncol(a3))
>> a3
>>
>> Essentially use the product to pick out the rows with at least one 0
>> and replace these rows with 0s.
>>
>> HTH.
>> -Christos
>>
>> -----Original Message-----
>> From: r-help-bounces at stat.math.ethz.ch
>> [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Robin Hankin
>> Sent: Thursday, July 27, 2006 9:54 AM
>> To: RHelp
>> Subject: [R] inserting rows into a matrix
>>
>> 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
>>
>> ______________________________________________
>> R-help at stat.math.ethz.ch mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-
>> guide.html and provide commented, minimal, self-contained,
>> reproducible code.
>>
>>
>
> --
> Robin Hankin
> Uncertainty Analyst
> National Oceanography Centre, Southampton European Way, Southampton
> SO14
> 3ZH, UK
> tel 023-8059-7743
>
>
>
--
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