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 <ccbe...@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@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. ______________________________________________ R-help@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.