[R] Loops

Uwe Ligges ligges at statistik.tu-dortmund.de
Sun Jan 27 15:54:57 CET 2013



On 27.01.2013 12:50, Richard D. Morey wrote:
>> Dear Contributors,
>> I am asking help on the way how to solve a problem related to loops for
>> that I always get confused with.
>> I would like to perform the following procedure in a compact way.
>>
>> Consider that p is a matrix composed of 100 rows and three columns. I need
>> to calculate the sum over some rows of each
>> column separately, as follows:
>>
>> fa1<-(colSums(p[1:25,]))
>>
>> fa2<-(colSums(p[26:50,]))
>>
>> fa3<-(colSums(p[51:75,]))
>>
>> fa4<-(colSums(p[76:100,]))
>>
>> fa5<-(colSums(p[1:100,]))
>>
>>
>>
>> and then I need to  apply to each of them the following:
>>
>>
>> fa1b<-c()
>>
>> for (i in 1:3){
>>
>> fa1b[i]<-(100-(100*abs(fa1[i]/sum(fa1[i])-(1/3))))
>>
>> }
>>
>
> I think I'd do it this way (correcting for the presumed error that Rui Barradas noted):
>
>> dim( p ) = c(25,4,3)
>
>> p2 = apply(p, c(2,3), sum)
>> p3 = t(apply(p2, 1, function(fa) 100-(100*abs(fa/sum(fa)-(1/3))) ) )

But you actually want it without any (apply-)loop:

p3 <- 100 - 100 * abs(p2 / rowSums(p2) - (1/3))

For this small setup it is not too important, but should be several 
times faster.

Uwe Ligges




> p3 now contains all your results except the one including all the data, which is trivial to compute.
>
> --
> Richard D. Morey
> Assistant Professor
> Psychometrics and Statistics
> Rijksuniversiteit Groningen / University of Groningen
> http://drsmorey.org/research/rdmorey
>
> ______________________________________________
> 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.
>



More information about the R-help mailing list