[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
> 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