Er, what version is this? I have (on a late 2010 MB Air!) > system.time(ifelse(x < y, x, y)) user system elapsed 0.072 0.012 0.085
and even > system.time({r<-numeric(1000000);ix <- x < y; r[ix]<-x[ix]; r[!ix]<-y[!ix]; > r}) user system elapsed 0.082 0.053 0.135 -pd > On 12 Jul 2019, at 15:02 , Richard O'Keefe <rao...@gmail.com> wrote: > > "ifelse is very slow"? Benchmark time. >> x <- runif(1000000) >> y <- runif(1000000) >> system.time(ifelse(x < y, x, y)) > user system elapsed > 0.403 0.044 0.448 >> system.time(y + (x < y)*(x - y)) > user system elapsed > 0.026 0.012 0.038 > > This appears to be a quality-of-implementation bug. > > > On Thu, 11 Jul 2019 at 04:14, Dénes Tóth <toth.de...@kogentum.hu> wrote: > >> >> >> On 7/10/19 5:54 PM, Richard O'Keefe wrote: >>> Expectation: ifelse will use the same "repeat vectors to match the >> longest" >>> rule that other vectorised functions do. So >>> a <- 1:5 >>> b <- c(2,3) >>> ifelse(a < 3, 1, b) >>> => ifelse(T T F F F <<5>>, 1 <<1>>, 2 3 <<2>>) >>> => ifelse(T T F F F <<5>>, 1 1 1 1 1 <<5>>, 2 3 2 3 2 <<5>>) >>> => 1 1 2 3 2 >>> and that is indeed the answer you get. Entirely predictable and >> consistent >>> with >>> other basic operations in R. >>> >>> The only tricky thing I see is that R has >>> a strict vectorised ifelse(logical.vector, some.vector, another.vector) >>> AND >>> a non-strict non-vectorised if (logical.scalar) some.value else >>> another.value >>> AND >>> a statement form if (logical.scalar) stmt.1; else stmt.2; >> >> Just for the records, there is a further form: >> `if`(logical.scalar, stmt.1, stmt.2) >> >> The main problem with ifelse is that 1) it is very slow, and 2) the mode >> of its return value can be unintuitive or not too predictable (see also >> the Value and Warning sections of ?ifelse). One has to be very careful >> and ensure that 'yes' and 'no' vectors have the same class, because >> ifelse will not warn you at all: >>> ifelse(c(TRUE, TRUE), 1:2, LETTERS[1:2]) >> [1] 1 2 >>> ifelse(c(TRUE, FALSE), 1:2, LETTERS[1:2]) >> [1] "1" "B" >> >> For options instead of base::ifelse, you might find this discussion >> helpful: >> https://github.com/Rdatatable/data.table/issues/3657 >> >> >> Cheers, >> Denes >> >> >>> >>> >>> On Thu, 11 Jul 2019 at 01:47, Eric Berger <ericjber...@gmail.com> wrote: >>> >>>> For example, can you predict what the following code will do? >>>>> a <- 1:5 >>>>> b <- c(2,3) >>>>> ifelse( a < 3, 1, b) >>>> >>>> >>>> On Wed, Jul 10, 2019 at 4:34 PM José María Mateos <ch...@rinzewind.org> >>>> wrote: >>>> >>>>> On Wed, Jul 10, 2019, at 04:39, Eric Berger wrote: >>>>>> 1. The ifelse() command is a bit tricky in R. Avoiding it is often a >>>> good >>>>>> policy. >>>>> >>>>> You piqued my curiosity, can you elaborate a bit more on this? >>>>> >>>>> -- >>>>> José María (Chema) Mateos || https://rinzewind.org >>>>> >>>>> ______________________________________________ >>>>> 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. >>>>> >>>> >>>> [[alternative HTML version deleted]] >>>> >>>> ______________________________________________ >>>> 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. >>>> >>> >>> [[alternative HTML version deleted]] >>> >>> ______________________________________________ >>> 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. >>> >> > > [[alternative HTML version deleted]] > > ______________________________________________ > 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. -- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd....@cbs.dk Priv: pda...@gmail.com ______________________________________________ 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.