>>>>> "CB" == Claudia Beleites <cbeleites at
units.it>
>>>>> on Sun, 28 Feb 2010 19:31:42 +0100 writes:
CB> Dear R-Developers,
CB> could 'sample' gain a ... argument?
As you may know, adding '...' also has drawbacks,
most notably that you lose automatic checking of correctly
specified argument names (when the function is called).
OTOH, R has now (since 2.9.0) had sample.int() as a fast and "robust"
alternative.
CB> As a convenience function, I added a sample Method to my hyperSpec
CB> class. This function however has a flag indicating whether the
results
CB> should be returned directly as a hyperSpec object or rather as
indices
CB> that give a random sample.
CB> For the moment, I use SetGeneric to add the dots argument, but this
of
CB> course gives a warning that the base function sample is overwritten
(and
CB> my colleagues are almost as scared of warnings as of errors...)
and they are not the only ones ...
For a while now, we have (in 'methods') the possibility to make
functions "implicit generic", see ?implicitGeneric ,
exactly for purposes like (I think) you have here
( and notably to ensure that if *different* packages do this,
they get "compatible" versions of the generic,
and hence all the different method definitions will be
"attached" to the same generic )
Namely, you'd want to define S4 methods (and hence make 'sample' an
S4 generic)
with "new" arguments in your package.
So, yes, I now have added 'sample' to the list of functions
that we make implicitGeneric in R.
--> Get a version of R-devel, (svn revision >= 51202)
and try the following:
> setClass("foo", contains="vector")
[1] "foo"
> setMethod("sample", "foo", function(x, size, myArg,
...) sprintf("sample(<foo>, myArg=%s)\n",myArg))
Restoring the implicit generic function for ?sample? from package ?base?
into package ?.GlobalEnv?; the generic differs from the default conversion
(Formal arguments differ: (x, size, replace, prob), (x, size, replace, prob,
...))
Creating a new generic function for "sample" in ".GlobalEnv"
[1] "sample"
> sample(new("foo"), myArg = 64)
[1] "sample(<foo>, myArg=64)\n"
Best regards,
Martin Maechler, ETH Zurich
CB> Thanks,
CB> Claudia
CB> --
CB> Claudia Beleites
CB> Dipartimento dei Materiali e delle Risorse Naturali
CB> Universit? degli Studi di Trieste
CB> Via Valerio 2
CB> I-34127 Trieste
CB> ITALY