# [R] Multiple if function

Anthoni, Peter (IMK) peter.anthoni at kit.edu
Wed Sep 16 07:56:38 CEST 2015

```Hi,

I guess this might work too and might be quite speedy:

ASBclass = factor(c(1,2,2,3,2,1))
Flow = c(1,1,1,1,1,1)

mult = ((ASBclass==1) * 0.1 + (ASBclass==2) * 0.15 + (ASBclass==3) * 0.2)
deviation = mult * Flow

or with the more complex arithmetic:

deviation = ((ASBclass==1) * (Flow*2) + (ASBclass==2) * (Flow+3) + (ASBclass==3) * sqrt(Flow))

cheers
Peter

> On 16 Sep 2015, at 04:20, Charles C. Berry <ccberry at ucsd.edu> wrote:
>
> On Tue, 15 Sep 2015, Bert Gunter wrote:
>
>> Thanks to both Davids.
>>
>> I realize that these things are often a matter of aesthetics -- and
>> hence have little rational justification -- but I agree with The Other
>> David: eval(parse) seems to me to violate R's soul( it makes R a macro
>> language instead of a functional one).
>>
>> However, mapply(... switch) effectively loops through the frame row by
>> row. Aesthetically, I like it; but it seems inefficient. If there are
>> e.g. 1e6 rows in say 10 categories, I think Jeff's approach should do
>> much better.  I'll try to generate some actual data to see unless
>> someone else beats me to it.
>
> Use mapply like this on large problems:
>
> unsplit(
>    mapply(
>        function(x,z) eval( x, list( y=z )),
>        expression( A=y*2, B=y+3, C=sqrt(y) ),
>        split( dat\$Flow, dat\$ASB ),
>        SIMPLIFY=FALSE),
>    dat\$ASB)
>
> Chuck
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help