[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