Re: [R] listing a sequence of vectors in a matrix

From: Gabor Grothendieck <ggrothendieck_at_gmail.com>
Date: Wed 23 Aug 2006 - 00:00:52 EST

Here is another variation using Robin's idea of t(sapply(...))

v <- c(3:5, 0)
t(sapply(lapply(v, function(n) seq(length = n)), "length<-", max(v) ))

# which can be shortened even further for the case where # there are no zeros in v

v <- 3:5
t(sapply(lapply(v, seq), "length<-", max(v) ))

On 8/22/06, Robin Hankin <r.hankin@noc.soton.ac.uk> wrote:
> Gabor makes a good point about seq() vs a:b [a common gotcha
> for me].
>
>
> I'll revise my original function to:
>
> > f <- function(a,n){(seq(length=a))[1:n]}
> > t(sapply(c(2,3,4,4,4,5,6,0),f,n=5))
> [,1] [,2] [,3] [,4] [,5]
> [1,] 1 2 NA NA NA
> [2,] 1 2 3 NA NA
> [3,] 1 2 3 4 NA
> [4,] 1 2 3 4 NA
> [5,] 1 2 3 4 NA
> [6,] 1 2 3 4 5
> [7,] 1 2 3 4 5
> [8,] NA NA NA NA NA
> >
>
>
>
>
> rksh
>
> On 22 Aug 2006, at 13:55, Gabor Grothendieck wrote:
>
> > Here are two solutions. seq(length = ...) instead of
> > just seq(...) is so that v can possibly contain zeros.
> >
> > # data
> > v <- 3:5
> >
> > # solution 1 - rbind/lapply
> > f <- function(n) {
> > s = seq(length = n)
> > replace(rep(NA, max(v)), s, s)
> > }
> > do.call(rbind, lapply(v, f))
> >
> > # solution 2 - loop
> > mat <- matrix(NA, length(v), max(v))
> > for(i in seq(v)) {
> > s <- seq(length = v[i])
> > mat[i, s] <- s
> > }
> >
> >
> > On 8/22/06, Sara-Jane Dunn <SND@bas.ac.uk> wrote:
> >> Hi,
> >>
> >> I'm having trouble applying the matrix function. I'd like to be
> >> able to
> >> create a matrix of vectors filled in by rows, which are not all
> >> the same
> >> length, and so I need it to fill in NAs where applicable.
> >>
> >> It's easiest to explain with a simple example:
> >>
> >> Suppose vec = c(3,4,5). How can I form a matrix of the vectors
> >> 1:vec[j]
> >> for j=1:3?
> >> i.e. 1 2 3 NA NA
> >> 1 2 3 4 NA
> >> 1 2 3 4 5
> >> I've tried matrix(c(1:vec[j]),nrow=max(j),ncol=max(vec)) but it will
> >> only give me a matrix with repeated values for j=1, like 1 2 3 1
> >> 2
> >> 3 1 2 3 1
> >> 2 3 1 2 3
> >>
> >> Also using the list function hasn't got me anywhere either..
> >>
> >> Any help/ideas would be greatly appreciated!
> >>
> >> Many thanks,
> >> Sara-Jane Dunn
> >>
> >> --
> >> This message (and any attachments) is for the recipient only...
> >> {{dropped}}
> >>
> >> ______________________________________________
> >> 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.
> >>
> >
> > ______________________________________________
> > 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
>
>



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 Wed Aug 23 00:30:02 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 Wed 23 Aug 2006 - 02:22:08 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.