rolf at math.unb.ca
Tue Aug 3 23:00:09 CEST 2004
Recently Brian Ripley had occasion to mock my inability to see a
comment in the code for arima(), in the stats package. After
considerable dredging around in the r-news archives I found reference
to keep.source() and keep.source.pkgs(), which I conjectured just
***might*** possibly be the ``obvious'' resource to which Prof.
Ripley thought I ought to have resorted.
However, after substantial experimentation, I am still at a loss to
get at the original source code for arima() (replete with comments)
save by accessing the original, ``unmade'' source for R. Not too
hard, but not exactly ``immediate''.
In the course of experimenting with keep.source.pkgs() I encountered
behaviour which I found mysterious and which I'd like to understand
better. Also if there is an easier way to get at comments in code of
``system'' functions I'd like to know about it.
In experimenting with keep.source.pkgs() I did the following
o executed options("keep.source.pkgs"), and got ``FALSE''
o executed library(spatstat)
o typed the name of a function in spatstat whose code has
comments (rmh.ppm) --- no comments appeared.
o executed options(keep.source.pkgs=TRUE)
o typed ``rmh.ppm'' again --- still no comments, as is to
o detached spatstat
o reloaded it
o type ``rmh.ppm'' again --- comments were there in all
their glory. OMMMMMMMMMMMMMMMMM!
Then I went through the same procedure with the package util and the
function vignette therefrom. (This function has comments in its
code.) Except that I didn't do an initial library(util), since util
gets loaded automatically on startup.
After setting keep.source.pkgs to TRUE via options(), detaching util,
and reloading it --- still no comments, and attr(vignette,"source")
The help for options() says that keep.source.pkgs defaults to TRUE
if the environment variable R_KEEP_PKG_SOURCE is set to `yes'.
So my next experiment was to stop R, set this variable, restart
R, and then type ``vignette''. Bingo. Comments appeared, and
attr(vignette,"source") was there bigtime.
However attr(arima,"source") was still NULL (and of course comments
were non-existant). Apparently the functions in stats get
***loaded*** from a binary file ``all.rda'' (in the
.../library/stats/R directory) rather than getting read in from ascii
files. (One hesitates to ask ***why***, but .... why?) Anyhow, I
guess that the binary versions in all.rda got built effectively with
keep.source.pkgs=FALSE, and so starting R with keep.source.pkgs=TRUE
doesn't help in this case.
So, some questions:
1) Why do ``system'' packages, e.g. util, behave differently
from ``optional'' packages? I.e. why does the sequence
. detach package
. set keep.source.pkgs=TRUE
. re-load package
``work'', i.e. make the source available for functions in
optional packages but not for functions in system packages?
2) Is there a better way of getting to see the
code-with-comments of system functions, rather than dicking
around with the R_KEEP_PKG_SOURCE environment variable?
3) Is there any way, other than retrieving the unmade source
of R, to see the commented source code of functions in the
stat package (and presumably methods, stats4, lattice, and
nlme which also boast all.rda files)?
I wonder if someone with better people skills and more patience
than Prof. Ripley would be so kind as to answer!
rolf at math.unb.ca
More information about the R-help