Row-wise recurive function call

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Row-wise recurive function call

Santosh Srinivas
Dear Group,

I have a following dataset:
> a
    A  B  C  D
1  22  3 31 40
2  26 31 36 32
3   3  7 49 16
4  24 40 27 26
5  20 45 47  0
6  34 43 11 18
7  48 48 24  2
8   3 16 39 48
9  20 49  7 21
10 17 36 47 10

> dput(a)
structure(list(A = c(22L, 26L, 3L, 24L, 20L, 34L, 48L, 3L, 20L,
17L), B = c(3L, 31L, 7L, 40L, 45L, 43L, 48L, 16L, 49L, 36L),
    C = c(31L, 36L, 49L, 27L, 47L, 11L, 24L, 39L, 7L, 47L), D = c(40L,
    32L, 16L, 26L, 0L, 18L, 2L, 48L, 21L, 10L)), .Names = c("A",
"B", "C", "D"), class = "data.frame", row.names = c(NA, -10L))


I have a function that works off EVERY individual ROW to throw a result.
Like

playFn <- function (x){
+ result = ((x$A+6*x$B)/(3*x$C)+20)*x$D
+ return(result)
+ }


I want to apply the function for every row .... can I use an "apply"
function ... tried but not been able to ...
e.g. print(rapply(a,playFn))

Please advise.

Thanks,
S

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Row-wise recurive function call

D. Rizopoulos
try this:

apply(data.matrix(a), 1, playFn)


I hope it helps.

Best,
Dimitris


On 11/9/2010 8:32 AM, Santosh Srinivas wrote:

> Dear Group,
>
> I have a following dataset:
>> a
>      A  B  C  D
> 1  22  3 31 40
> 2  26 31 36 32
> 3   3  7 49 16
> 4  24 40 27 26
> 5  20 45 47  0
> 6  34 43 11 18
> 7  48 48 24  2
> 8   3 16 39 48
> 9  20 49  7 21
> 10 17 36 47 10
>
>> dput(a)
> structure(list(A = c(22L, 26L, 3L, 24L, 20L, 34L, 48L, 3L, 20L,
> 17L), B = c(3L, 31L, 7L, 40L, 45L, 43L, 48L, 16L, 49L, 36L),
>      C = c(31L, 36L, 49L, 27L, 47L, 11L, 24L, 39L, 7L, 47L), D = c(40L,
>      32L, 16L, 26L, 0L, 18L, 2L, 48L, 21L, 10L)), .Names = c("A",
> "B", "C", "D"), class = "data.frame", row.names = c(NA, -10L))
>
>
> I have a function that works off EVERY individual ROW to throw a result.
> Like
>
> playFn<- function (x){
> + result = ((x$A+6*x$B)/(3*x$C)+20)*x$D
> + return(result)
> + }
>
>
> I want to apply the function for every row .... can I use an "apply"
> function ... tried but not been able to ...
> e.g. print(rapply(a,playFn))
>
> Please advise.
>
> Thanks,
> S
>
> ______________________________________________
> [hidden email] 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.
>

--
Dimitris Rizopoulos
Assistant Professor
Department of Biostatistics
Erasmus University Medical Center

Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
Tel: +31/(0)10/7043478
Fax: +31/(0)10/7043014
Web: http://www.erasmusmc.nl/biostatistiek/

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Row-wise recurive function call

Santosh Srinivas
Thanks this works. Only, I need to reference in the formula using indexes.


-----Original Message-----
From: Dimitris Rizopoulos [mailto:[hidden email]]
Sent: 09 November 2010 13:22
To: Santosh Srinivas
Cc: [hidden email]
Subject: Re: [R] Row-wise recurive function call

try this:

apply(data.matrix(a), 1, playFn)


I hope it helps.

Best,
Dimitris


On 11/9/2010 8:32 AM, Santosh Srinivas wrote:

> Dear Group,
>
> I have a following dataset:
>> a
>      A  B  C  D
> 1  22  3 31 40
> 2  26 31 36 32
> 3   3  7 49 16
> 4  24 40 27 26
> 5  20 45 47  0
> 6  34 43 11 18
> 7  48 48 24  2
> 8   3 16 39 48
> 9  20 49  7 21
> 10 17 36 47 10
>
>> dput(a)
> structure(list(A = c(22L, 26L, 3L, 24L, 20L, 34L, 48L, 3L, 20L,
> 17L), B = c(3L, 31L, 7L, 40L, 45L, 43L, 48L, 16L, 49L, 36L),
>      C = c(31L, 36L, 49L, 27L, 47L, 11L, 24L, 39L, 7L, 47L), D = c(40L,
>      32L, 16L, 26L, 0L, 18L, 2L, 48L, 21L, 10L)), .Names = c("A",
> "B", "C", "D"), class = "data.frame", row.names = c(NA, -10L))
>
>
> I have a function that works off EVERY individual ROW to throw a result.
> Like
>
> playFn<- function (x){
> + result = ((x$A+6*x$B)/(3*x$C)+20)*x$D
> + return(result)
> + }
>
>
> I want to apply the function for every row .... can I use an "apply"
> function ... tried but not been able to ...
> e.g. print(rapply(a,playFn))
>
> Please advise.
>
> Thanks,
> S
>
> ______________________________________________
> [hidden email] 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.
>

--
Dimitris Rizopoulos
Assistant Professor
Department of Biostatistics
Erasmus University Medical Center

Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
Tel: +31/(0)10/7043478
Fax: +31/(0)10/7043014
Web: http://www.erasmusmc.nl/biostatistiek/

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Row-wise recurive function call

sayan dasgupta
On Tue, Nov 9, 2010 at 1:58 PM, Santosh Srinivas <[hidden email]
> wrote:

> Thanks this works. Only, I need to reference in the formula using indexes.
>

In case you don't want to change references in formula try this
try this

library(plyr)
adply(a,1,playFn)

also it easy to parallelize using .parallel argument with foreach in
background


>
>
> -----Original Message-----
> From: Dimitris Rizopoulos [mailto:[hidden email]]
> Sent: 09 November 2010 13:22
> To: Santosh Srinivas
> Cc: [hidden email]
> Subject: Re: [R] Row-wise recurive function call
>
> try this:
>
> apply(data.matrix(a), 1, playFn)
>
>
> I hope it helps.
>
> Best,
> Dimitris
>
>
> On 11/9/2010 8:32 AM, Santosh Srinivas wrote:
> > Dear Group,
> >
> > I have a following dataset:
> >> a
> >      A  B  C  D
> > 1  22  3 31 40
> > 2  26 31 36 32
> > 3   3  7 49 16
> > 4  24 40 27 26
> > 5  20 45 47  0
> > 6  34 43 11 18
> > 7  48 48 24  2
> > 8   3 16 39 48
> > 9  20 49  7 21
> > 10 17 36 47 10
> >
> >> dput(a)
> > structure(list(A = c(22L, 26L, 3L, 24L, 20L, 34L, 48L, 3L, 20L,
> > 17L), B = c(3L, 31L, 7L, 40L, 45L, 43L, 48L, 16L, 49L, 36L),
> >      C = c(31L, 36L, 49L, 27L, 47L, 11L, 24L, 39L, 7L, 47L), D = c(40L,
> >      32L, 16L, 26L, 0L, 18L, 2L, 48L, 21L, 10L)), .Names = c("A",
> > "B", "C", "D"), class = "data.frame", row.names = c(NA, -10L))
> >
> >
> > I have a function that works off EVERY individual ROW to throw a result.
> > Like
> >
> > playFn<- function (x){
> > + result = ((x$A+6*x$B)/(3*x$C)+20)*x$D
> > + return(result)
> > + }
> >
> >
> > I want to apply the function for every row .... can I use an "apply"
> > function ... tried but not been able to ...
> > e.g. print(rapply(a,playFn))
> >
> > Please advise.
> >
> > Thanks,
> > S
> >
> > ______________________________________________
> > [hidden email] 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.
> >
>
> --
> Dimitris Rizopoulos
> Assistant Professor
> Department of Biostatistics
> Erasmus University Medical Center
>
> Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
> Tel: +31/(0)10/7043478
> Fax: +31/(0)10/7043014
> Web: http://www.erasmusmc.nl/biostatistiek/
>
> ______________________________________________
> [hidden email] 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.
>

Thanks and Regards
Sayan Dasgupta

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Row-wise recurive function call

David Winsemius
In reply to this post by Santosh Srinivas

On Nov 9, 2010, at 3:28 AM, Santosh Srinivas wrote:

> Thanks this works. Only, I need to reference in the formula using  
> indexes.

Then you need to use the indices inside plaFn.

playFn<- function (x){
   result = ((x[1]+6*x[2])/(3*x[3])+20)*x[4]
   return(result)
   }

>
>
> -----Original Message-----
> From: Dimitris Rizopoulos [mailto:[hidden email]]
> Sent: 09 November 2010 13:22
> To: Santosh Srinivas
> Cc: [hidden email]
> Subject: Re: [R] Row-wise recurive function call
>
> try this:
>
> apply(data.matrix(a), 1, playFn)
>
>
> I hope it helps.
>
> Best,
> Dimitris
>
>
> On 11/9/2010 8:32 AM, Santosh Srinivas wrote:
>> Dear Group,
>>
>> I have a following dataset:
>>> a
>>     A  B  C  D
>> 1  22  3 31 40
>> 2  26 31 36 32
>> 3   3  7 49 16
>> 4  24 40 27 26
>> 5  20 45 47  0
>> 6  34 43 11 18
>> 7  48 48 24  2
>> 8   3 16 39 48
>> 9  20 49  7 21
>> 10 17 36 47 10
>>
>>> dput(a)
>> structure(list(A = c(22L, 26L, 3L, 24L, 20L, 34L, 48L, 3L, 20L,
>> 17L), B = c(3L, 31L, 7L, 40L, 45L, 43L, 48L, 16L, 49L, 36L),
>>     C = c(31L, 36L, 49L, 27L, 47L, 11L, 24L, 39L, 7L, 47L), D =  
>> c(40L,
>>     32L, 16L, 26L, 0L, 18L, 2L, 48L, 21L, 10L)), .Names = c("A",
>> "B", "C", "D"), class = "data.frame", row.names = c(NA, -10L))
>>
>>
>> I have a function that works off EVERY individual ROW to throw a  
>> result.
>> Like
>>
>> playFn<- function (x){
>> + result = ((x$A+6*x$B)/(3*x$C)+20)*x$D
>> + return(result)
>> + }
>>
>>
>> I want to apply the function for every row .... can I use an "apply"
>> function ... tried but not been able to ...
>> e.g. print(rapply(a,playFn))
>>
>> Please advise.
>>
>> Thanks,
>> S
>>
>> ______________________________________________
>> [hidden email] 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.
>>
>
> --
> Dimitris Rizopoulos
> Assistant Professor
> Department of Biostatistics
> Erasmus University Medical Center
>
> Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
> Tel: +31/(0)10/7043478
> Fax: +31/(0)10/7043014
> Web: http://www.erasmusmc.nl/biostatistiek/
>
> ______________________________________________
> [hidden email] 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.

David Winsemius, MD
West Hartford, CT

______________________________________________
[hidden email] 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.