[R] Environmental oddity.
Rolf Turner
r@turner @end|ng |rom @uck|@nd@@c@nz
Sun Nov 7 01:35:08 CET 2021
I have two functions which appear to differ only in their environments.
They look like:
> d1
> function (x, mean = 0, sd = 1, log = FALSE)
> (((x - mean)/sd)^2 - 1) * if (log) 1 else dnorm(x, mean, sd)/sd
> <environment: namespace:stats>
and
> d2
> function (x, mean = 0, sd = 1, log = FALSE)
> (((x - mean)/sd)^2 - 1) * if (log) 1 else dnorm(x, mean, sd)/sd
Typing "environment(d1)" gives
> <environment: namespace:stats>
and typing "environment(d2)" gives
> <environment: R_GlobalEnv>
The d2() function however gives an incorrect result:
> d1(1,0,3,TRUE)
> [1] -0.2962963
> d2(1,0,3,TRUE)
> [1] -0.8888889
In d2() the result of the if() statement does not get divided
by the final "sd" whereas in d1() it does (which is the desired/correct
result).
Of course the code is ridiculously kludgy (it was produced by "symbolic
differentiation"). That's not the point. I'm just curious (idly?) as
to *why* the association of the namespace:stats environment with d1()
causes it to "do the right thing".
Can anyone give me any insight? Ta.
cheers,
Rolf Turner
--
Honorary Research Fellow
Department of Statistics
University of Auckland
Phone: +64-9-373-7599 ext. 88276
More information about the R-help
mailing list