Dear S Ellison, Thanks for the flowers! Indeed, I was actually considering to use it in my own teaching material, as well. With rounded numbers, of course.
Though I am still slightly disturbed about this feature. I thought, now it is the time to switch to Python, but that’s even worse, see here: def add_elem(List=[]): List.append('elem') return List >>> add_elem([2]) [2, 'elem'] >>> add_elem() ['elem'] >>> add_elem() ['elem', 'elem'] <<<<<<<<<<< why on earth does this happen? [it’s documented behavior, but still…] So, I’ll stick with R. Still 25 years or so until retirement, but I’ll survive, even without crossreferenced default arguments. Best wishes, Matthias Von: S Ellison Gesendet: Dienstag, 5. September 2017 16:17 An: Matthias Gondan; r-help@r-project.org Betreff: RE: [R] Strange lazy evaluation of default arguments Mathias, If it's any comfort, I appreciated the example; 'expected' behaviour maybe, but a very nice example for staff/student training! S Ellison > -----Original Message----- > From: R-help [mailto:r-help-boun...@r-project.org] On Behalf Of Matthias > Gondan > Sent: 02 September 2017 18:22 > To: r-help@r-project.org > Subject: [R] Strange lazy evaluation of default arguments > > 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@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. ******************************************************************* This email and any attachments are confidential. Any use...{{dropped:12}} ______________________________________________ R-help@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.