Thanks to you all, they are very useful and I am learning a lot. Best, Francesca
On 27 January 2013 19:20, arun <smartpink...@yahoo.com> wrote: > > > Hi, > > You could use library(plyr) as well > library(plyr) > pnew<-colSums(aaply(laply(split(as.data.frame(p),((1:nrow(as.data.frame(p))-1)%/% > 25)+1),as.matrix),c(2,3),function(x) x)) > res<-rbind(t(pnew),colSums(p)) > row.names(res)<-1:nrow(res) > res<- 100-100*abs(res/rowSums(res)-(1/3)) > A.K. > > > ----- Original Message ----- > From: Rui Barradas <ruipbarra...@sapo.pt> > To: Francesca <francesca.panco...@gmail.com> > Cc: r-help@r-project.org > Sent: Sunday, January 27, 2013 6:17 AM > Subject: Re: [R] Loops > > Hello, > > I think there is an error in the expression > > 100-(100*abs(fa1[i]/sum(fa1[i])-(1/3))) > > Note that fa1[i]/sum(fa1[i]) is always 1. If it's fa1[i]/sum(fa1), try > the following, using lists to hold the results. > > > # Make up some data > set.seed(6628) > p <- matrix(runif(300), nrow = 100) > > idx <- seq(1, 100, by = 25) > fa <- lapply(idx, function(i) colSums(p[i:(i + 24), ])) > fa[[5]] <- colSums(p) > > fab <- lapply(fa, function(x) 100 - 100*abs(x/sum(x) - 1/3)) > fab > > You can give names to the lists elements, if you want to. > > > names(fa) <- paste0("fa", 1:5) > names(fab) <- paste0("fa", 1:5, "b") > > > Hope this helps, > > Rui Barradas > > Em 27-01-2013 08:02, Francesca escreveu: > > 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)))) > > > > } > > > > > > fa2b<-c() > > > > for (i in 1:3){ > > > > fa2b[i]<-(100-(100*abs(fa2[i]/sum(fa2[i])-(1/3)))) > > > > } > > > > > > and so on. > > > > Is there a more efficient way to do this? > > > > Thanks for your time! > > > > Francesca > > > > ---------------------------------- > > Francesca Pancotto, PhD > > Università di Modena e Reggio Emilia > > Viale A. Allegri, 9 > > 40121 Reggio Emilia > > Office: +39 0522 523264 > > Web: https://sites.google.com/site/francescapancotto/ > > ---------------------------------- > > > > [[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. > > > > ______________________________________________ > 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. > > -- Francesca ---------------------------------- Francesca Pancotto, PhD Università di Modena e Reggio Emilia Viale A. Allegri, 9 40121 Reggio Emilia Office: +39 0522 523264 Web: https://sites.google.com/site/francescapancotto/ ---------------------------------- [[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.