[R] Question about expression parser for "return" statement
Duncan Murdoch
murdoch.duncan at gmail.com
Sun Nov 13 13:58:15 CET 2016
On 13/11/2016 6:47 AM, Duncan Murdoch wrote:
> On 13/11/2016 12:50 AM, Dave DeBarr wrote:
>> I've noticed that if I don't include parentheses around the intended return
>> value for the "return" statement, R will assume the first parenthetical
>> expression is the intended return value ... even if that parenthetical
>> expression is only part of a larger expression.
>>
>> Is this intentional?
>
> Yes, return is just a function call that has side effects. As far as
> the parser is concerned,
>
> return ((1/sqrt(2*pi*Variance))*exp(-(1/2)*((x - Mean)^2)/Variance))
>
> is basically the same as
>
> f((1/sqrt(2*pi*Variance))*exp(-(1/2)*((x - Mean)^2)/Variance))
By the way, out of curiosity I took a look at the source of CRAN
packages to see if this actually occurs. It turns out that "return" is
used as a variable name often enough to make automatic tests tricky, so
I don't know the answer to my question. However, I did turn up a number
of cases where people have code like this:
if (name == "") return;
(from the bio.infer package), which never calls return(), so doesn't
actually do what the author likely intended.
Duncan Murdoch
>
> Duncan Murdoch
>
>>
>> I'm guessing it is intentional; but since there is no warning about
>> ignoring the rest of the expression, it could lead to hard-to-find bugs.
>>
>> Thanks,
>> Dave
>>
>> Here's an example ...
>>
>> dnorm(2, 0, 1)
>> normalDensityFunction = function(x, Mean, Variance) {
>> # no parentheses surrounding the entire "return" value
>> return (1/sqrt(2*pi*Variance))*exp(-(1/2)*((x - Mean)^2)/Variance)
>> }
>> normalDensityFunction(2, 0, 1) # incorrect answer
>> normalDensityFunction = function(x, Mean, Variance) {
>> # parentheses surrounding the entire "return" value
>> return ((1/sqrt(2*pi*Variance))*exp(-(1/2)*((x - Mean)^2)/Variance))
>> }
>> normalDensityFunction(2, 0, 1) # correct answer
>>
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> 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.
>>
>
More information about the R-help
mailing list