On Jul 27, 2011, at 7:44 PM, Gene Leynes wrote: > David, > > Thanks for the suggestion, but I think your answer only works > because I was printing the wrong thing (because apply with margin=1 > transposes the results,
And if you want to change that, then the t() function is readily at hand. > something I always forget). > > Check this to see what I mean: > str(answerGood) > str(answerBad) > > Adding "as.matrix" is interesting and almost does it, "It" ... What is "it"? In a natural language, ... English preferably. -- david. > however the results are still transposed. > > Sorry to be confusing with the initial example. > > Here's an updated example (adding as.matrix doesn't make a difference) > > > ## 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)) > answerProposed = lapply(exampBad, function(x) as.matrix(apply(x , > 1:1,cumsum))) > str(answerGood) > str(answerBad) > str(answerProposed) > > ## Take the first element of the final column of each answer > for(mat in answerGood){ > mat = t(mat) ## To get back to 1000 rows > LastColumn = ncol(mat) > print(mat[2,LastColumn]) > } > for(mat in answerBad){ > mat = t(mat) ## To get back to 1000 rows > LastColumn = ncol(mat) > print(mat[2,LastColumn]) > } > for(mat in answerProposed){ > mat = t(mat) ## To get back to 1000 rows > LastColumn = ncol(mat) > print(mat[2,LastColumn]) > } > > > > On Wed, Jul 27, 2011 at 5:45 PM, David Winsemius <dwinsem...@comcast.net > > wrote: > > On Jul 27, 2011, at 6:22 PM, Gene Leynes 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)) > > Try instead: > > answerBad = lapply(exampBad, function(x) as.matrix(apply(x , > 1:1,cumsum))) > > > I also find wrapping as.matrix() around vector results inside a > print() call often makes my console output much more to my liking. > > > 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. > > David Winsemius, MD > West Hartford, CT > > David Winsemius, MD West Hartford, CT [[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.