> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of Yuchen Luo
> Sent: Wednesday, June 20, 2007 10:28 PM
> To: r-help@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

______________________________________________
R-help@stat.math.ethz.ch 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.

Reply via email to