You did not specify what your function should return and thus it returns 
the last value by default. If a!=1, the value returned is 2, however if 
a==1, the function tries to return the result of {if (a!=1) {aaa=2}}.

You can correct this easily by modifying your function like this:
aaa=function(a)
{if (a==1) {aaa=1}
if (a!=1) {aaa=2}
aaa
}

Petr

Yuchen Luo napsal(a):
> 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
> 
>       [[alternative HTML version deleted]]
> 
> ______________________________________________
> 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.
> 

-- 
Petr Klasterecky
Dept. of Probability and Statistics
Charles University in Prague
Czech Republic

______________________________________________
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