[R] Strange lazy evaluation of default arguments
Matthias Gondan
matthias-gondan at gmx.de
Sat Sep 2 19:22:22 CEST 2017
Dear R developers,
sessionInfo() below
Please have a look at the following two versions of the same function:
1. Intended behavior:
> Su1 = function(u=100, l=u, mu=0.53, sigma2=4.3^2)
+ {
+ print(c(u, l, mu)) # here, l is set to u’s value
+ u = u/sqrt(sigma2)
+ l = l/sqrt(sigma2)
+ mu = mu/sqrt(sigma2)
+ print(c(u, l, mu))
+ }
>
> Su1()
[1] 100.00 100.00 0.53
[1] 23.2558140 23.2558140 0.1232558
In the first version, both u and l are correctly divided by 4.3.
2. Strange behavior:
> Su2 = function(u=100, l=u, mu=0.53, sigma2=4.3^2)
+ {
+ # print(c(u, l, mu))
+ u = u/sqrt(sigma2)
+ l = l/sqrt(sigma2) # here, l is set to u’s value
+ mu = mu/sqrt(sigma2)
+ print(c(u, l, mu))
+ }
>
> Su2()
[1] 23.2558140 5.4083288 0.1232558
In the second version, the print function is commented out, so the variable u is
copied to l (lowercase L) at a later place, and L is divided twice by 4.3.
Is this behavior intended? It seems strange that the result depends on a debugging message.
Best wishes,
Matthias
> sessionInfo()
R version 3.4.1 (2017-06-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=German_Germany.1252 LC_CTYPE=German_Germany.1252 LC_MONETARY=German_Germany.1252
[4] LC_NUMERIC=C LC_TIME=German_Germany.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.4.1 tools_3.4.1
[[alternative HTML version deleted]]
More information about the R-help
mailing list