[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