Dennis, ninety Thanks, I did try almost exactly the same thing. I decided it was too complicated, especially since I have a whole mess of functions I want to use this way. You see, I usually work with lists of lists of matrices that are dimensioned by simulations X time, so there's usually a one column matrix at the bottom of the list. So, I really want a general solution because I use it all the time.
For now I'm going to stick with for loops, they work fine and are more clear in the unlikely event that anyone else ever looks at my code. The loops just take up more space / are harder to read. for example: for(i in 1:nrow(mat)) mat[i,] = cumsum(mat[i,])/(1:ncol(mat)) On Wed, Jul 27, 2011 at 9:30 PM, Dennis Murphy <djmu...@gmail.com> wrote: > Hi: > > Try this: > > exampGood = lapply(2:4, function(x) matrix(rnorm(10 * x), ncol = x)) > exampBad = lapply(1:3, function(x) matrix(rnorm(10 * x), ncol = x)) > > csfun <- function(m) { > if(ncol(m) == 1L) {return(m)} else { > t(as.matrix(apply(m, 1, cumsum))) > } > } > > lapply(exampGood, csfun) > lapply(exampBad, csfun) > > HTH, > Dennis > > On Wed, Jul 27, 2011 at 3:22 PM, Gene Leynes <gleyne...@gmail.com> wrote: > > I have tried a lot of ways around this, but I can't find a way to make > apply > > work in a generalized way because it causes a failure whenever reduces > the > > dimensions of its output. > > The following example is easier to understand than the question. > > > > I wish it had a "drop=TRUE/FALSE" option like the "[" (and I wish I had > > found the drop option a year ago, and I wish that I had 1e6 dollars... > Oops, > > I mean euros). > > > > > > ## Make three example matricies > > exampGood = lapply(2:4, function(x)matrix(rnorm(1000*x),ncol=x)) > > exampBad = lapply(1:3, function(x)matrix(rnorm(1000*x),ncol=x)) > > ## Two ways to see what was created: > > for(k in 1:length(exampGood)) print(dim(exampGood[[k]])) > > for(k in 1:length(exampBad)) print(dim(exampBad[[k]])) > > > > ## Take the cumsum of each row of each matrix > > answerGood = lapply(exampGood, function(x) apply(x ,1,cumsum)) > > answerBad = lapply(exampBad, function(x) apply(x ,1,cumsum)) > > str(answerGood) > > str(answerBad) > > > > ## Take the first element of the final column of each answer > > for(mat in answerGood){ > > LastColumn = ncol(mat) > > print(mat[1,LastColumn]) > > } > > for(mat in answerBad){ > > LastColumn = ncol(mat) > > print(mat[1,LastColumn]) > > } > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > 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]] ______________________________________________ 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.