Sent from my phone. Please excuse my brevity.
On September 2, 2017 10:53:14 AM PDT, Matthias Gondan <matthias-gondan at gmx.de> wrote:
>Dear Bill,
>
>All makes perfect sense (including the late evaluation). I actually
>discovered the problem by looking at old code which used your proposed
>solution. Still I find it strange (and, hnestly, I don?t like R?s
>behavior in this respect), and I am wondering why u is not being copied
>to L just before u is assigned a new value. Of course, this would
>require the R interpreter to track all these dependencies in both ways
>incl. more complicated ones in which L might depend on more than just
>u.
>
>In the future, I?ll avoid dependencies between parameters.
>
>Su4 <- function(u=100, l=100, mu=0.53, sigma2=4.3^2) # instead of l=u
>
>And maybe also ?in-place? changes of values?
>
>Best regards,
>
>Matthias
>
>Von: William Dunlap
>Gesendet: Samstag, 2. September 2017 19:41
>An: Rui Barradas
>Cc: Matthias Gondan; r-help at r-project.org
>Betreff: Re: [R] Strange lazy evaluation of default arguments
>
>Another way to avoid the problem is to not redefine variables that are
>arguments.? E.g.,
>
>> Su3 <- function(u=100, l=u, mu=0.53, sigma2=4.3^2, verbose)
>? {
>? ? if (verbose) {
>? ? ? print(c(u, l, mu))
>? ? }
>? ? uNormalized <- u/sqrt(sigma2)
>? ? lNormalized <- l/sqrt(sigma2)
>? ? muNormalized <- mu/sqrt(sigma2)
>? ? c(uNormalized, lNormalized, muNormalized)
>? }
>> Su3(verbose=TRUE)
>[1] 100.00 100.00 ? 0.53
>[1] 23.2558140 23.2558140 ?0.1232558
>> Su3(verbose=FALSE)
>[1] 23.2558140 23.2558140 ?0.1232558
>
>Not redefining variables at all makes debugging easier, although it may
>waste space.
>
>
>Bill Dunlap
>TIBCO Software
>wdunlap tibco.com
>
>On Sat, Sep 2, 2017 at 10:33 AM, <ruipbarradas at sapo.pt> wrote:
>Hello,
>
>One way of preventing that is to use ?force.
>Just put
>
>? ?force(l)
>
>right after the commented out print and before you change 'u'.
>
>Hope this helps,
>
>Rui Barradas
>
>
>
>Citando Matthias Gondan <matthias-gondan at gmx.de>:
>
>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.
>
>______________________________________________
>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.
>
>
>
> [[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.