[R] Equivalent for Matematica function Which...
Jarek Jasiewicz
jarekj at amu.edu.pl
Tue Sep 29 21:17:06 CEST 2009
William Dunlap pisze:
>> -----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! it seems very good approach
Jarek
More information about the R-help
mailing list