[R] "if" within a function

Nordlund, Dan (DSHS/RDA) NordlDJ at dshs.wa.gov
Thu Jun 21 07:56:47 CEST 2007


> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch 
> [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Yuchen Luo
> Sent: Wednesday, June 20, 2007 10:28 PM
> To: r-help at stat.math.ethz.ch
> Subject: [R] "if" within a function
> 
> Dear Friends.
> I found a puzzling phenomenon in R when you use 'if' within a 
> function:
> 
> # defining a function aaa
> aaa=function(a)
> {if (a==1) {aaa=1};
>  if (a!=1) {aaa=2}
>  }
> 
> # using the function:
> > b=20
> > bbb=aaa(b)
> > bbb
> [1] 2
> > typeof(bbb)
> [1] "double"
> >
> >
> > c=1
> > ccc=aaa(c)
> > ccc
> NULL
> > typeof(ccc)
> [1] "NULL"
> 
> It seems that only the last 'if' phrase works. Is it an 
> instrinsic weakness
> of R? Is there a way to get around it? ( I use 'elseif' to 
> get around this
> when there are only two cases to choose from, but what if 
> there are more
> than two cases to choose from?)
> 
> Best
> Yuchen
> 

Yuchen,

In R, a function returns the last value evaluated.  In your case, if the argument passed to aaa() is equal to 1, the value returned is the value of the last if statement which is null.

You can tell aaa() to return the value you want with something like this

aaa<-function(a)
{if (a==1) return(1)
 if (a!=1) return(2)
 }

Hope this is helpful,

Dan

Daniel J. Nordlund
Research and Data Analysis
Washington State Department of Social and Health Services
Olympia, WA  98504-5204



More information about the R-help mailing list