Re: [R] Merge list to list - as list

From: Gabor Grothendieck <ggrothendieck_at_gmail.com>
Date: Sun 03 Sep 2006 - 14:02:33 GMT

By the way here is another solution. This one recursively descends throught the list structure so that it that works regardless of the nesting of your lists (provided x and y are compatible) thus it can be used in answer to both the original post and to this one:

cbind2 <- function(x, y) {

   if (is.list(x))

      mapply(cbind2, x, y, SIMPLIFY = FALSE)    else

      cbind(x,y)
}

x <- list(list(matrix(1:20, 5, 4),matrix(1:20, 5, 4)),
         list(matrix(1:20, 5, 4),matrix(1:20, 5, 4)))
y <- list(list(c(1, -1, -1, 1, 1),c(1, 1, -1, -1, -1)),
         list(c(1, 1, 1, 1, 1),c(1, 1, -1, 1, -1)))
cbind2(x,y)

cbind2(x[[1]], y[[1]])
cbind2(x[[1]][[1]], y[[1]][[1]])

On 9/3/06, Gabor Grothendieck <ggrothendieck@gmail.com> wrote:
> If z is the result then z[[i]] is formed from x[[i]] and y[[i]] using
> the previous solution, viz.
>
> z <- list()
> z[[1]] <- mapply(cbind, x[[1]], y[[1]], SIMPLIFY = FALSE)
> z[[2]] <- mapply(cbind, x[[2]], y[[2]], SIMPLIFY = FALSE)
>
> or with a for loop (which is similar to the code you posted below except
> the extraneous j loop is removed since its already incorporated
> in the mapply):
>
> z <- list()
> for(i in seq(along = x))
> z[[i]] <- mapply(cbind, x[[1]], y[[1]], SIMPLIFY = FALSE)
>
> or reducing the loop to a lapply:
>
> lapply(seq(along = x), function(i) mapply(cbind, x[[i]], y[[i]],
> SIMPLIFY = FALSE))
>
>
>
> On 9/3/06, Muhammad Subianto <msubianto@gmail.com> wrote:
> > Dear all,
> > #Last week, I asked about merge x and y as list.
> > #Now I have a dataset with list of list like:
> > x <- list(list(matrix(1:20, 5, 4),matrix(1:20, 5, 4)),
> > list(matrix(1:20, 5, 4),matrix(1:20, 5, 4)))
> > y <- list(list(c(1, -1, -1, 1, 1),c(1, 1, -1, -1, -1)),
> > list(c(1, 1, 1, 1, 1),c(1, 1, -1, 1, -1)))
> > x
> > y
> >
> > #I need merge x and y, I have tried with
> > list.uni <- vector("list", length(x))
> > for (i in 1:length(x)) {
> > for (j in 1:length(x[[1]])) {
> > list.uni[[i]][[j]] <- mapply(cbind,
> > x[[i]][[j]],
> > y[[i]][[j]],
> > SIMPLIFY=FALSE)
> > }
> > }
> > list.uni
> >
> > I have learn about ?lapply, ?sapply and ?mapply but I still didn't
> > understand how to use it.
> > I need the result something like
> >
> >
> > [[1]]
> > [[1]][[1]]
> > [,1] [,2] [,3] [,4] [5]
> > [1,] 1 6 11 16 1
> > [2,] 2 7 12 17 -1
> > [3,] 3 8 13 18 -1
> > [4,] 4 9 14 19 1
> > [5,] 5 10 15 20 1
> >
> > [[1]][[2]]
> > [,1] [,2] [,3] [,4] [5]
> > [1,] 1 6 11 16 1
> > [2,] 2 7 12 17 1
> > [3,] 3 8 13 18 -1
> > [4,] 4 9 14 19 -1
> > [5,] 5 10 15 20 -1
> >
> >
> > [[2]]
> > [[2]][[1]]
> > [,1] [,2] [,3] [,4] [5]
> > [1,] 1 6 11 16 1
> > [2,] 2 7 12 17 1
> > [3,] 3 8 13 18 1
> > [4,] 4 9 14 19 1
> > [5,] 5 10 15 20 1
> >
> > [[2]][[2]]
> > [,1] [,2] [,3] [,4] [5]
> > [1,] 1 6 11 16 1
> > [2,] 2 7 12 17 1
> > [3,] 3 8 13 18 -1
> > [4,] 4 9 14 19 1
> > [5,] 5 10 15 20 -1
> >
> > Thanks you for any help.
> > Best wishes, Muhammad Subianto
> >
> >
> >
> >
> > #Gabor Grothendieck ggrothendieck at gmail.com
> > #Mon Aug 28 13:53:52 CEST 2006
> >
> > Here are two ways:
> >
> > 1. use indexes:
> >
> > lapply(seq(along = x), function(i) cbind(x[[i]], y[[i]]))
> >
> > 2. use mapply:
> >
> > mapply(cbind, x, y, SIMPLIFY = FALSE)
> >
> >
> > On 8/28/06, Muhammad Subianto <msubianto at gmail.com> wrote:
> > > Dear all,
> > >
> > > I have dataset
> > > x <- list(matrix(1:20, 5, 4),matrix(1:20, 5, 4),matrix(1:20, 5, 4))
> > > y <- list(matrix(110:114, 5, 1),matrix(110:114, 5, 1),matrix(110:114, 5, 1))
> > >
> > > I need merge x and y as list (y put in last column).
> > > The result is something like
> > >
> > > [[1]]
> > > [,1] [,2] [,3] [,4] [,5]
> > > [1,] 1 6 11 16 110
> > > [2,] 2 7 12 17 111
> > > [3,] 3 8 13 18 112
> > > [4,] 4 9 14 19 113
> > > [5,] 5 10 15 20 114
> > >
> > > [[2]]
> > > [,1] [,2] [,3] [,4] [,5]
> > > [1,] 1 6 11 16 110
> > > [2,] 2 7 12 17 111
> > > [3,] 3 8 13 18 112
> > > [4,] 4 9 14 19 113
> > > [5,] 5 10 15 20 114
> > >
> > > [[3]]
> > > [,1] [,2] [,3] [,4] [,5]
> > > [1,] 1 6 11 16 110
> > > [2,] 2 7 12 17 111
> > > [3,] 3 8 13 18 112
> > > [4,] 4 9 14 19 113
> > > [5,] 5 10 15 20 114
> > >
> > > I have tried
> > > a <- list(x,y)
> > > as.data.frame(t(sapply(a, rbind)))
> > > lapply(a, function(x) matrix(unlist(x), nrow = length(x), byrow = TRUE))
> > > but I don't know how to fix it.
> > >
> > > Regards, Muhammad Subianto

> >
> > ______________________________________________
> > 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. Received on Mon Sep 04 00:15:59 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 Thu 07 Sep 2006 - 07:51:17 GMT.

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