Hi Everyone, I have a list of vectors like this (in this case it's 3 vectors but assume the vector count and the length of each vector is not known): [[1]] [1] 9 5 7 2 14 4 4 3 [[2]] [1] 3 6 25 2 14 3 3 4 [[3]] [1] 28 4 14 3 14 2 4 5 What I want to do is take the average vertically. Thus I want to do 9+3+28 /3, 5+6+4 /3, etc... and then have it return a vector. I'm assuming that if I can sum it, I can count it to so summing this would be just as helpful. I understand I can first go through each element of the list, get a vector, cbind into matrix and sum across but I was hoping to avoid that... I tried getting it to work with mapply but am having difficulties... Thanks! Kind regards, Greg
Hi Greg, Here are two ways of doing it:> mylist <- list(x = rpois(10, 10), y = rpois(10, 20), z = rpois(10, 5)) > mylist$x [1] 3 13 14 16 10 7 3 5 12 14 $y [1] 17 16 26 13 23 24 16 28 23 12 $z [1] 2 6 5 5 5 1 9 11 6 4> > colMeans(do.call(rbind, mylist), na.rm = TRUE)[1] 7.333333 11.666667 15.000000 11.333333 12.666667 10.666667 9.333333 14.666667 13.666667 [10] 10.000000> > Reduce("+", mylist)/length(mylist)[1] 7.333333 11.666667 15.000000 11.333333 12.666667 10.666667 9.333333 14.666667 13.666667 [10] 10.000000 HTH, Jorge On Fri, Oct 29, 2010 at 6:46 PM, Gregory Ryslik <> wrote:> Hi Everyone, > > I have a list of vectors like this (in this case it's 3 vectors but assume > the vector count and the length of each vector is not known): > > [[1]] > [1] 9 5 7 2 14 4 4 3 > > [[2]] > [1] 3 6 25 2 14 3 3 4 > > [[3]] > [1] 28 4 14 3 14 2 4 5 > > What I want to do is take the average vertically. Thus I want to do 9+3+28 > /3, 5+6+4 /3, etc... and then have it return a vector. I'm assuming that if > I can sum it, I can count it to so summing this would be just as helpful. > > I understand I can first go through each element of the list, get a vector, > cbind into matrix and sum across but I was hoping to avoid that... I tried > getting it to work with mapply but am having difficulties... > > Thanks! > > Kind regards, > Greg > ______________________________________________ > R-help@r-project.org 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. >[[alternative HTML version deleted]]
Aplogies to the original poster - I got names wrong in a cut and paste Hi Jorge I tried your methods for all (which work for complete rows) and then I remove the first value of $y and repeated; both fail because of the unequal numbers The problem is when there are unequal numbers in the rows and trying to make a matrix of them. I was trying some things with Greg's vaules. x <- list() x[[1]] <- c(9,5,7,2, 14, 4, 4, 3) x[[2]] <- c(3, 6, 25, 2, 14, 3, 3 , 4) x[[3]] <- c(28, 4 ,14, 3, 14, 2 ,4 , 5) x[4] <- list(28 , 4 ,14 , 3, 14, 2 , 4 ) x.av <- list() for(j in seq_along(1:max(sapply(x,length))) ) x.av[j] <- mean(sapply(x,"[",j),na.rm=T) unlist(x.av) # if you want a vector which Greg may have used first Regards Duncan ______________________________________________>R-help at r-project.org 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.