[R] simplify this instruction

David Winsemius dwinsemius at comcast.net
Thu Nov 20 05:06:07 CET 2008


On Nov 19, 2008, at 8:38 PM, Wacek Kusnierczyk wrote:

> Jorge Ivan Velez wrote:
>>
>>> B=0:12
>>> B
>>>
>> [1]  0  1  2  3  4  5  6  7  8  9 10 11 12
>>
>>> ifelse(B%in%c(0:9),'A','B')
>>>
>> [1] "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')
  [1] "A" "A" "A" "A" "A" "A" "A" "A" "A" "A" "B" "B" "B"

 > if (B %in% as.character(0:9)) "A" else "B"
[1] "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"
[1] "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"))))))))))
  [1] "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
> 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