[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