[R] Question about expression parser for "return" statement

Duncan Murdoch murdoch.duncan at gmail.com
Sun Nov 13 12:47:10 CET 2016


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

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