>>>>> "CB" == Claudia Beleites <cbelei...@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 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel