Re: [R] How to use conditional statement

From: Duncan Murdoch <murdoch.duncan_at_gmail.com>
Date: Thu, 10 Mar 2011 06:54:18 -0500

On 11-03-10 5:54 AM, Ivan Calandra wrote:
> Try with double "== "instead:
> ifelse(val3 == "Monthly", val<- val1, val<- val2)

That might work, but it is not how you should do it. (It should work if val3 has a single entry, but will do strange things if val3 is a vector:

> val3 <- c("Monthly", "Daily")
> ifelse(val3 == "Monthly", val<- 1, val<- 2) [1] 1 2
> val
[1] 2

The ifelse() function does a vectorized test, and picks results from the two vector alternatives. Vincy wants a simple logical if, which can be computed in a few different ways:

val <- if(val3 == "Monthly") val1 else val2

or

if (val3 == "Monthly") val <- val1
else val <- val2

For a simple calculation like this I'd probably use the former; if the calculation got more complex I'd prefer the latter.

Duncan Murdoch

>
> Single "=" is for setting arguments within a function call. If you want
> to test equality, then double "==" is required.
> See ?"=="
>
> HTH,
> Ivan
>
> Le 3/10/2011 11:45, Vincy Pyne a écrit :
>> Dear R helpers
>>
>> Suppose
>>
>> val1 = c(10, 20, 35, 80, 12)
>> val2 = c(3, 8, 11, 7)
>>
>> I want to select either val1 or val2 depending on value of third quantity val3.
>>
>> val3 assumes either of the values "Monthly" or "Yearly".
>>
>> If val3 = "Monthly", then val = val1 and if val3 = "Yearly", then val = val2.
>>
>> I tried the ifelse statement as
>>
>>
>> ifelse(val3 = "Monthly", val = val1, val2)
>>
>> I get following error
>>
>>> ifelse(val3 = "Monthly", val = val1, val2)
>> Error in ifelse(val3 = "Monthly", val = val1, val2) :
>> unused argument(s) (val3 = "Monthly", val = val1)
>>
>>> val
>>
>> Kindly guide.
>>
>> Regards
>>
>> Vincy
>>
>>
>>
>> [[alternative HTML version deleted]]
>>
>>
>>
>> ______________________________________________
>> R-help_at_r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help