> -----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.