From f.harrell at vanderbilt.edu  Sat Jul  3 15:51:10 2004
From: f.harrell at vanderbilt.edu (Frank E Harrell Jr)
Date: Sat Jul  3 15:57:18 2004
Subject: [Rd] Top-level code in packages
In-Reply-To: <Pine.LNX.4.44.0407030622030.32334-100000@gannet.stats>
References: <Pine.LNX.4.44.0407030622030.32334-100000@gannet.stats>
Message-ID: <40E6B9CE.5010606@vanderbilt.edu>

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


[Rd] Top-level code in packages
Frank E Harrell Jr