From leydold at statistik.wu-wien.ac.at  Tue Feb 14 16:44:23 2006
From: leydold at statistik.wu-wien.ac.at (Josef Leydold)
Date: Tue, 14 Feb 2006 16:44:23 +0100
Subject: [Rd] S4 classes and methods with optional arguments
In-Reply-To: <mailman.7.1139914801.6090.r-devel@r-project.org>
References: <mailman.7.1139914801.6090.r-devel@r-project.org>
Message-ID: <20060214154423.GA6722@essek.stat-math.wu-wien.ac.at>

Hi,

i have used S4 classes to implement a unified access to random number generators
(package rstream on CRAN).

I have used a construct to allow optional arguments:

if(!isGeneric("rstream.sample"))
        setGeneric("rstream.sample", function(stream,...) standardGeneric("rstream.sample"))

setMethod("rstream.sample", c("rstream","numeric"), 
          function(stream,n=1) { ... [ code ] ... } )

Thus if rs is an instance of an rstream object one can a random
sample of size 10 using 

rstream.sample(rs, 10)

for a sample of size 1 one can use equivalently

rstream.sample(rs,1) 
rstream.sample(rs) 

however, with R-devel the above construct does not work any more, due to
more stringent checkings. It can be fixed by replacing it by

if(!isGeneric("rstream.sample"))
        setGeneric("rstream.sample", function(stream,n) standardGeneric("rstream.sample"))

setMethod("rstream.sample", c("rstream","numeric"), 
          function(stream,n=1) { ... [ code ] ... } )

then rstream.sample(rs) does not work any more.

Is there still a way to allow optional arguments for methods of
S4 classes?

Josef



[Rd] S4 classes and methods with optional arguments
Josef Leydold