[R] apply is making me crazy...
David Winsemius
dwinsemius at comcast.net
Thu Jul 28 00:45:11 CEST 2011
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 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.
David Winsemius, MD
West Hartford, CT
More information about the R-help
mailing list