# Re: [R] simplify this instruction

From: David Winsemius <dwinsemius_at_comcast.net>
Date: Wed, 19 Nov 2008 23:06:07 -0500

> Jorge Ivan Velez wrote:
>>
>>> B=0:12
>>> B
>>>
>>  0 1 2 3 4 5 6 7 8 9 10 11 12
>>
>>> ifelse(B%in%c(0:9),'A','B')
>>>
>>  "A" "A" "A" "A" "A" "A" "A" "A" "A" "A" "B" "B" "B"
>>
>>
>
> given the example, the solution would rather be
>
> if (B %in% as.character(0:9)) "A" else "B"
>
> or maybe
>
> if (as.numeric(B) %in% 0:9) "A" else "B"

Er, ... The solution offered by Velez duplicates the action of the nested ifelse expressions offered by the original poster. Your alternatives do not. The ifelse(cond, consequenceA, consequenceB) function operates on a vector and returns a vector of equal length, whereas:

if cond consequenceA else consequenceB # only returns a single item.

> B <- 0:12
> ifelse(B %in% c(0:9), 'A', 'B')
 "A" "A" "A" "A" "A" "A" "A" "A" "A" "A" "B" "B" "B"

> if (B %in% as.character(0:9)) "A" else "B"  "A"
Warning message:
In if (B %in% as.character(0:9)) "A" else "B" :

the condition has length > 1 and only the first element will be used

> if (as.numeric(B) %in% 0:9) "A" else "B"  "A"
Warning message:
In if (as.numeric(B) %in% 0:9) "A" else "B" :

the condition has length > 1 and only the first element will be used

``` > ifelse(B=="0","A",
+ ifelse(B=="1","A",
+ ifelse(B=="2","A",
+ ifelse(B=="3","A",
+ ifelse(B=="4","A",
+ ifelse(B=="5","A",
+ ifelse(B=="6","A",
+ ifelse(B=="7","A",
+ ifelse(B=="8","A",
+ ifelse(B=="9","A","B"))))))))))
```

 "A" "A" "A" "A" "A" "A" "A" "A" "A" "A" "B" "B" "B"  >
```--
David Winsemius
Heritage Labs

>
>
>>
>>> On Wed, Nov 19, 2008 at 4:42 PM, CE.KA <ce.kaya75_at_yahoo.fr> wrote:
>>>
>>>
>>>> Hi R users,

>>>>
>>>> Is there a way to simplify this instruction:
>>>> ifelse(B=="0","A",
>>>> ifelse(B=="1","A",
>>>> ifelse(B=="2","A",
>>>> ifelse(B=="3","A",
>>>> ifelse(B=="4","A",
>>>> ifelse(B=="5","A",
>>>> ifelse(B=="6","A",
>>>> ifelse(B=="7","A",
>>>> ifelse(B=="8","A",
>>>> ifelse(B=="9","A","B"))))))))))
>>>>
>>>> i am looking for something like this:
>>>>
>>>> ifelse(B=="(0:9)","A","B")
>>>>
>>>>
>
> ______________________________________________
> R-help_at_r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> and provide commented, minimal, self-contained, reproducible code.

______________________________________________
R-help_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help