[R] Strange lazy evaluation of default arguments

Jeff Newmiller jdnewmil at dcn.davis.ca.us
Sat Sep 2 19:55:46 CEST 2017


Yes, this is intended behavior, and it has everything to do with where the parameters are first referenced and nothing to do with debugging. 
-- 
Sent from my phone. Please excuse my brevity.

On September 2, 2017 10:22:22 AM PDT, Matthias Gondan <matthias-gondan at gmx.de> wrote:
>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]]
>
>______________________________________________
>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