[Rd] Top-level code in packages
Frank E Harrell Jr
f.harrell at vanderbilt.edu
Sat Jul 3 15:51:10 CEST 2004
Prof Brian Ripley wrote:
> 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.
I use that sort of construct a lot, except that tools::: can't be used
in general for backwards compatibility and for compatibility with
S-Plus. But often I use the following construct and would like to keep
doing so, especially when defining functions for compatibility when the
function only needs defining for a subset of the supported systems:
if(.R. || .SV4.) { # variables defined in Hmisc or Design package
foo <- function( . . . ) {
}
NULL # prevents printing a result in S-Plus
}
>
> 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.
>
Thanks Brian,
Frank
--
Frank E Harrell Jr Professor and Chair School of Medicine
Department of Biostatistics Vanderbilt University
More information about the R-devel
mailing list