# [R] if else in R

Ben Tupper btupper at bigelow.org
Wed Nov 20 03:54:43 CET 2013

```Hi,

On Nov 19, 2013, at 9:41 PM, Nick Matzke <matzke at berkeley.edu> wrote:

> Hi,
>
> This would be an issue with if() as well as if/else.  ab\$b has 4
> numbers in it, so ab\$b > 0 evaluates to "TRUE TRUE FALSE TRUE" or
> whatever. if() can only take a single true or false. Cheers! Nick
>

As a follow up, you could make a logical index for the condition as Nick suggests.

a<-c(1,2,3,4)
b<-c(2,0,5,0)
ab<-data.frame(a,b)
ix <- ab[,'b'] > 0
ix
# [1]  TRUE FALSE  TRUE FALSE

ab[ix,'c'] <- ab[ix,'a']/ab[ix,'b']
ab[!ix,'c'] <- 0
ab
#  a b   c
# 1 1 2 0.5
# 2 2 0 0.0
# 3 3 5 0.6
# 4 4 0 0.0

I'm not a big fan of the ab\$b form of subsetting, I find ab[,'b'] more readable for my fading eyesight.  But you could do it your way, too.

ab\$c[ix] <- ab\$a[ix]/ab\$b[ix]

Cheers,
Ben

> On Tue, Nov 19, 2013 at 8:30 PM, Gary Dong <pdxgary163 at gmail.com> wrote:
>> Dear R users,
>>
>> I am a R beginner and I am having trouble in using "If Else" in R. Here is
>> an example:
>>
>> ## create a data frame
>>
>> a<-c(1,2,3,4)
>> b<-c(2,0,5,0)
>> ab<-data.frame(cbind(a,b))
>>
>> ##calculate c, which is the ratio between a and b
>>
>> if(ab\$b>0) {
>> ab\$c<-ab\$a/ab\$b
>> } else {
>> ab\$c<-0
>> }
>>
>> here is the error I got:
>>
>> Warning message:
>> In if (ab\$b > 0) { :
>>  the condition has length > 1 and only the first element will be used.
>>
>> Any help is appreciated!
>>
>> Gary
>>
>>        [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> 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