You could also use: sapply(seq_len(ncol(mdat)),function(i) mdat[,i]*100/x[i]) # [,1] [,2] [,3] [,4] [,5] #[1,] 7.142857 13.33333 30 36.36364 27.77778 #[2,] 78.571429 80.00000 130 90.90909 55.55556 #[3,] 14.285714 20.00000 40 45.45455 33.33333 #[4,] 71.428571 60.00000 80 81.81818 55.55556 #[5,] 35.714286 40.00000 70 72.72727 22.22222 A.K.
----- Original Message ----- From: Suparna Mitra <suparna.mitra...@gmail.com> To: Pascal Oettli <kri...@ymail.com> Cc: r-help@r-project.org Sent: Tuesday, May 21, 2013 5:19 AM Subject: Re: [R] Using loop for applying function on matrix Thanks for your reply Pascal. I am presently using it with sweep. But here in the question I just gave one simple example. In reality I need several functions to run. Thus I was wondering, if without sweep, I can use loop. Also want to learn how to do this using loop. Any help will be really great, Thanks, Mitra Dr. Suparna Mitra Department of Molecular and Clinical Pharmacology Institute of Translational Medicine University of Liverpool Block A: Waterhouse Buildings 1-5 Brownlow Street Liverpool L69 3GL Tel. +44 (0)151 795 5414 M: +44 (0) 7523228621 Internal ext: 55401 On 21 May 2013 16:29, Pascal Oettli <kri...@ymail.com> wrote: > Hi, > > ?sweep > > mdat <- matrix(c(1,11,2,10,5,2,12,3,9,**6,3,13,4,8,7,4,10,5,9,8,5,10,** > 6,10,4),5,5) > x <- c(14,15,10,11,18) > > sweep(mdat*100, 2, x, FUN='/') > > [,1] [,2] [,3] [,4] [,5] > [1,] 7.142857 13.33333 30 36.36364 27.77778 > [2,] 78.571429 80.00000 130 90.90909 55.55556 > [3,] 14.285714 20.00000 40 45.45455 33.33333 > [4,] 71.428571 60.00000 80 81.81818 55.55556 > [5,] 35.714286 40.00000 70 72.72727 22.22222 > > Hope this helps, > Pascal > > > > On 05/21/2013 04:16 PM, Suparna Mitra wrote: > >> Hello R Experts, >> I need a bit of help in using loop. >> I have a matrix onto which I need to use several functions. >> >> In a simplified form suppose my matrix is >> >>> mdat >>> >> [,1] [,2] [,3] [,4] [,5] >> [1,] 1 2 3 4 5 >> [2,] 11 12 13 10 10 >> [3,] 2 3 4 5 6 >> [4,] 10 9 8 9 10 >> [5,] 5 6 7 8 4 >> >> And I have one vector >> >>> x >>> >> [1] 14 15 10 11 18 >> >> Now suppose in simple form I want to create a matrix in which each col >> value will be divided with consecutive no from vector x. For example >> >> column 1 of new vector will be C1=mdat[,1]*100/x[1] >> >> C1 >>> >> [1] 7.142857 78.571429 14.285714 71.428571 35.714286 >> >> Now how can I use the loop to have the complete vector at a time? >> I tried something like this, but in vain. >> for(i in 1:5) { >> Data=(mdat[,i]*100/x[i], add=T) >> } >> >> Any help will be really great. >> Thanks, >> Mitra >> >> [[alternative HTML version deleted]] >> >> ______________________________**________________ >> R-help@r-project.org mailing list >> https://stat.ethz.ch/mailman/**listinfo/r-help<https://stat.ethz.ch/mailman/listinfo/r-help> >> PLEASE do read the posting guide http://www.R-project.org/** >> posting-guide.html <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. ______________________________________________ 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.