[R] Multiple if function
Anthoni, Peter (IMK)
peter.anthoni at kit.edu
Wed Sep 16 07:56:38 CEST 2015
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))
> 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:
> function(x,z) eval( x, list( y=z )),
> expression( A=y*2, B=y+3, C=sqrt(y) ),
> split( dat$Flow, dat$ASB ),
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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