[R] Equivalent for Matematica function Which...

William Dunlap wdunlap at tibco.com
Tue Sep 29 20:54:06 CEST 2009


> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of Jarek Jasiewicz
> Sent: Tuesday, September 29, 2009 11:36 AM
> To: Erik Iverson
> Cc: R-help at r-project.org
> Subject: Re: [R] Equivalent for Matematica function Which...
> 
> well function arguments are in square brackets. z is result (new 
> vector). I show Matematica syntax, but cannot explain what I 
> expect. Sorry
> The example is wrong because it can be replaced by R cut 
> function. The 
> arguments are: condition,action.... and can be replaced by 
> ste of ifelse 
> formulas:
> 
> if (x<10) x<-0.7
> else if (x<30 && x=>10) x<-x^2/(x-1)
> etc...
> but that solution is slow for vectors with millions of numbers

ifelse is different than if-then-else.  Your if-then-else needs
to be in a loop but ifelse is vectorized.  Try something like
    z <- ifelse(x<10,
                    0.7,    # result for x's less than 10
                    ifelse(x<30 & x>=10,   # x>=10 is redundant in this
branch
                             x^2/(x-1), # result for x's >=10 and x<30
                             1))          # result for x's>=30

That evaluates all the arguments for each value in x, even those
for which the answer will not be used.  That wastes some time
and sometimes causes warnings or even errors.  In that case you
can use more flexible but less convenient syntax like:

   z <- NA * x # initialize z to be like x but filled with NA's
   cond <- x<10
   z[cond] <- 0.7
   cond <- x>=10 & x<30
   z[cond] <- x[cond]^2/(x[cond]-1) # or (function(y)y^2/(y-1))(x[cond])
   cond <- x>=30
   z[cond] <- 1.0
           
> 
> thanks
> 
> Jarek
> 
> Erik Iverson pisze:
> > Hello, 
> >
> >   
> >> I'm looking for equivalent of Matematica function "Which" 
> which works as
> >> follows:
> >>
> >> z = Which[x<10,0.3, 10<=x<20,0.5, 20<=x<100,1]
> >>
> >> where x is a vector
> >>     
> >
> > Unless someone happens to be a Mathematica user (very 
> possible), I don't know how we would answer the question.  
> You give an example of the function call, but not what the 
> function arguments or return value are.  
> >
> > There is an R function called "which", but what the 
> Mathematica "Which" is doing is entirely mysterious from your 
> example.  What is in "z" for instance??
> >
> 
> ______________________________________________
> R-help at r-project.org mailing list
> 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