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.