From: Robin Hankin <r.hankin_at_noc.soton.ac.uk>

Date: Fri 28 Jul 2006 - 00:42:46 EST

Date: Fri 28 Jul 2006 - 00:42:46 EST

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@noc.soton.ac.uk]
**> Sent: Thursday, July 27, 2006 10:16 AM
**> To: christos@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@stat.math.ethz.ch
**>> [mailto:r-help-bounces@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@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 ______________________________________________ R-help@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.Received on Fri Jul 28 02:09:04 2006

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.1.8, at Fri 28 Jul 2006 - 04:18:32 EST.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*