R-alpha: .Options$digits do not (always) work.
Peter Dalgaard BSA
p.dalgaard@kubism.ku.dk
04 Aug 1997 19:36:24 +0200
Martin Maechler <maechler@stat.math.ethz.ch> writes:
>
> I am sorry that this IS an old topic.
> Yet another task
> I think the bug is somewhere in hidden in src/main/options.c ..
>
> ##-- The following does not work as it should in R (0.50-a1, but I think
> also earlier)
>
> tst <- function(x=pi, dig =3) {.Options$digits <- as.integer(dig); print(x);x}
> tst()
> tst(dig = 12)
>
>
> ##-- This should do the same; it works as expected in R & S :
>
> tst2 <- function(x=pi, dig =3) {
> oo <- options(digits=dig); on.exit(oo); print(x);x}
^^^^^^^^^^^
on.exit(options(oo))
> tst2()
> tst2(dig = 12)
I'm not sure this is a bug at all, given the scoping rules, etc.
However, things are strange. Consider the following:
> f<-function(){print(a$b);a$b<-pi;print(a$b)}
> f()
[1] 2
[1] 2
> f<-function(){print(a$b);a<-a;a$b<-pi;print(a$b)}
> f()
[1] 2
[1] 3.141593
The difference is that in the first case, a is in .GlobalEnv, and not
modifiable with "<-" ("<<-" works). Apparently, "$<-" won't
automatically create a copy of a in the current environment which is
what I had expected. Still, creating .Options explicitly in tst()
doesn't work, which fact is probably due to the digits argument in
print.default defaulting to NULL, and print.default has no reason to
look on the frame stack for .Options.
However, changing the print.default definition to
print.default<-function (x, digits = eval(expression(.Options$digits),
sys.frame(sys.parent())), quote = TRUE, na.print = NULL, print.gap = NULL)
{
.Internal(print.default(x, digits, quote, na.print, print.gap))
}
*and*
tst<-function (x = pi, dig = 3)
{
.Options <- .Options
.Options$digits <- as.integer(dig)
print(x)
x
}
does seem to do what you wanted...
--
O__ ---- Peter Dalgaard Blegdamsvej 3
c/ /'_ --- Dept. of Biostatistics 2200 Cph. N
(*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk) FAX: (+45) 35327907
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-