Matt Pocernich
2012-Apr-24 15:33 UTC
[Rd] Specifying a function as not being and S3 Class function
I am compiling a library with legacy code which has functions named with periods in the names - but are not S3 class functions. For example for example, summary.agriculture is not an extension of the summary function for and 'agriculture. class object - it is just poorly named. Is it possible to keep from triggering the following warning when I check the package? * checking S3 generic/method consistency ... WARNING summary: function(object, ...) summary.agriculture: function(x, analyte.names, results.col, analyte.col, by, det.col, iQuantiles, iDetStats, iSW, iUCL, iLand, conf.level, iUTL, tol.level, utl.conf.level, iND, sig.figs) I know that the best answer would be to rename with a better naming convention, but that would cause issues with legacy applications. Thanks, Matt
S Ellison
2012-Apr-24 16:50 UTC
[Rd] Specifying a function as not being and S3 Class function
> Is it possible to keep from triggering the following warning > when I check the package? > > summary: > function(object, ...) > summary.agriculture: > function(x, analyte.names, results.col, analyte.col, by, det.col, > [clip]Part of the solution is to add ... to the legacy function; that is required by the generic and is missing in your own function. Adding ... will not break existing code. The name of the initial argument will still cause problems. But I've kludged round a similar issue (an intentional difference in required parameters, in my case) by replacing something like obj.summary(x, y, z, ...) with something like obj.summary(object, y, z, x=object, ...) This preserves legacy argument order, is consistent with summary(object, ...) and retains the named argument x to avoid code changes. But it is clearly a kludge. It also runs the risk of accidental overwriting of x if someone specifies too many unnamed parameters. That should not happen in working legacy code, of course, as that would have broken if you included a surplus parameter in a function call with no ... . If it _is_ a problem you could try obj.summary(object, y, z, ..., x=object), which would avoid the accidental assignment by requiring exact match naming, but I cannot recall offhand if that construct would be considered consistent with the generic using the current CMD check. Steve Ellison> -----Original Message----- > From: r-devel-bounces at r-project.org > [mailto:r-devel-bounces at r-project.org] On Behalf Of Matt Pocernich > Sent: 24 April 2012 16:34 > To: r-devel at r-project.org > Subject: [Rd] Specifying a function as not being and S3 Class function > > > I am compiling a library with legacy code which has functions > named with periods in the names - but are not S3 class > functions. For example for example, summary.agriculture > is not an extension of the summary function for and > 'agriculture. class object - it is just poorly named. > > Is it possible to keep from triggering the following warning > when I check the package? > > * checking S3 generic/method consistency ... WARNING > > summary: > function(object, ...) > summary.agriculture: > function(x, analyte.names, results.col, analyte.col, by, det.col, > iQuantiles, iDetStats, iSW, iUCL, iLand, conf.level, iUTL, > tol.level, utl.conf.level, iND, sig.figs) > > I know that the best answer would be to rename with a better > naming convention, but that would cause issues with legacy > applications. > > Thanks, > > Matt > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > *******************************************************************This email and any attachments are confidential. Any use...{{dropped:8}}