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, <ruipbarra...@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-gon...@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@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/posti >> ng-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> > > ______________________________________________ > 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/posti > ng-guide.html > and provide commented, minimal, self-contained, reproducible code. > [[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.