[Rd] Top-level code in packages

Prof Brian Ripley ripley at stats.ox.ac.uk
Sat Jul 3 07:30:36 CEST 2004

On Fri, 2 Jul 2004, Frank E Harrell Jr wrote:

> Brian Ripley stated that in the future it will not be a good idea to 
> have top-level code in R packages other than assignments.  There is one 
> important exception, though it leads instantly to an assignment.  To 
> maintain compatibility across multiple platforms (R, S-Plus, and more 
> than one version of each, Windows, Linux, etc.) I frequently use if( ) 
> statements to conditionally define functions depending on the operating 
> system and the version of R or S-Plus in effect.

That _is_ a top-level assignment. `Defining' a function is actually
assigning a value to a symbol, and code inside if, for, etc is executed at
top level.

I prefer to write

foo <- if(tools:::.OStype() == "windows") {...} else {...}

for conditional `definitions' precisely because it is clearer that is what 
is going on.

BTW, if you want to test the OS you can't do it with .Platform$OS.type and
allow cross-building, hence the test illustrated.

Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

More information about the R-devel mailing list