William Dunlap pisze:
-----Original Message-----
From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On Behalf Of Jarek Jasiewicz
Sent: Tuesday, September 29, 2009 11:36 AM
To: Erik Iverson
Cc: R-help@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! it seems very good approach
Jarek

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

Reply via email to