Re: [Rd] Clarification on generic functions and methods

From: Henrik Bengtsson <hb_at_stat.berkeley.edu>
Date: Wed, 11 Nov 2009 16:43:50 +0100

Using

jml <- function(...) UseMethod("jml")

will do.

/Henrik

On Wed, Nov 11, 2009 at 4:26 PM, Doran, Harold <HDoran_at_air.org> wrote:
> I have constructed the following functions and need a little clarification:
>
> ### function to fit the model parameters
> jml.fit <- function(dat, con = 1e-3, bias=FALSE, ...){
>        do stuff ...
> }
>
> ### default function which calls jml.fit
> jml.default <- function(dat, con = 1e-3, bias=FALSE, ...){
>        result <- jml.fit(dat, con = 1e-3, bias)
>        result$call <- match.call()
>        class(result) <- "jml"
>        result
> }
>
> ### Function to make use of formula
> jml.formula <- function(formula, data, na.action, subset, ...){
>        mf <- match.call(expand.dots = FALSE)
>    m <- match(c("formula", "data", "na.action", "subset"), names(mf), 0L)
>    mf <- mf[c(1L, m)]
>    mf$drop.unused.levels <- TRUE
>    mf[[1L]] <- as.name("model.frame")
>    mf <- eval(mf, parent.frame())
>        mt <- attr(mf, "terms")
>        dat <- mf
>        result <- jml.default(dat, ...)
>        result$call <- match.call()
>        result$formula <- formula
>        result
> }
>
> ### and the generic function
> jml <- function(dat, con = 1e-3, bias=FALSE, ...) UseMethod("jml")
>
> Writing R Extensions states, "If the generic specifies defaults, all methods should use the same defaults."
>
> In my example above, the generic function has 2 defaults: one for argument con and another bias. I'm a little confused on exactly how the generic function should be structured for proper package development.
>
> I think the options are:
>
> 1) jml <- function(dat, con = 1e-3, bias=FALSE, ...) UseMethod("jml")
> 2) jml <- function(x, con = 1e-3, bias=FALSE, ...) UseMethod("jml")
> 3) jml <- function(formula, data, na.action, subset, con = 1e-3, bias = FALSE, ...) UseMethod("jml")
>
> I'm inclined to believe #3 is correct because the .Rd page needs to reflect the args in this function, is that right? Then, this generic function would include the formula, data, na.action, and subset and it includes the proper defaults as the other functions.
>
> Thank you
> Harold
>
>> sessionInfo()
> R version 2.10.0 (2009-10-26)
> i386-pc-mingw32
>
> locale:
> [1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252
> [3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
> [5] LC_TIME=English_United States.1252
>
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods   base
>
> other attached packages:
> [1] scoreFoo_1.1   MiscPsycho_1.4 statmod_1.4.1
>
> loaded via a namespace (and not attached):
> [1] tools_2.10.0
> ______________________________________________
> R-devel_at_r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Wed 11 Nov 2009 - 15:47:36 GMT

This archive was generated by hypermail 2.2.0 : Wed 11 Nov 2009 - 17:30:35 GMT