[R] Using loop for applying function on matrix

arun smartpink111 at yahoo.com
Tue May 21 15:04:24 CEST 2013


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.sm at gmail.com>
To: Pascal Oettli <kridox at ymail.com>
Cc: r-help at 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 <kridox at 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 at 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 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