[R] checking generic/method consistency

Arne Henningsen ahenningsen at email.uni-kiel.de
Tue Sep 30 17:14:17 CEST 2003


On Tuesday 30 September 2003 15:23, Martin Maechler wrote:
> >>>>> "Arne" == Arne Henningsen <ahenningsen at email.uni-kiel.de>
> >>>>>     on Tue, 30 Sep 2003 14:18:11 +0200 writes:
>
>     Arne> Hi *,
>
>     Arne> thanks for all your answers and discussions. And
>     Arne> additionally special thanks to Henrik Bengtsson for
>     Arne> writing the first draft of the "R Coding
>     Arne> Conventions". I think that this document contains a
>     Arne> lot of good ideas to make the code more
>     Arne> readable. Since my package is *new* code, I adjusted
>     Arne> it according to most recommendations of the RCC.
>
>     Arne> However, one thing is still unclear to me: According
>     Arne> to the RCC I gave the class of result of my function
>     Arne> "linProg" also the name "linProg", but the RCC says
>     Arne> that classes must start with uppercase, while
>     Arne> functions must start with lowercase, which is
>     Arne> contradictory in this case. In one of the examples of
>     Arne> the RCC, a function that returns an object with a
>
>     Arne> class attribute starts with uppercase:
>     >> Line <- function(x0, y0, x1, y1) {
>     >>      line <- list(x=c(x0,y0), y=(x1,y1));
>     >>      class(line) <- "Line";
>     >>      line;
>     >> }
>
> do not end lines with ";" in S (i.e. R or S-plus); it's
> superfluous and considered ugly by many (incl. me) and teaches
> (by example) a wrong idea.

Fortunately, I adjusted my code according to *most* (and not all) 
recommendations of the RCC and e.g. did *not* add the (also in my opinion) 
ugly semicolons.

>     Arne> Does this mean that the names of these functions
>     Arne> should start with uppercase?
>
> While I agree that Henrik has put up several well thought out
> recommendations {and very helpful postings such as the one you
> cite below!} , these are *Henrik*'s recommendations and are
> still subject to discussion and feedback.
> The S language has quite a long tradition and existing function
> and class base which cannot be changed mostly for compatibility
> reasons.
> One thing in this tradition is to have function "foobar" return
> objects of class "foobar" (identical spelling including case).
> This particularly applies to the "old" or S3 class/method system
> on which still very much of the basic S models are based.
> When using S3 classes (as you are above), I'd definitely keep
> that S tradition.

Thanks for your comment. Now I don't feel so bad if I ignore some of Henrik's 
RCCs ;-). However, I think it's important for us to agree on some coding 
conventions since the inconsistency of the syntax between R packages is a 
drawback of R (see e.g. Jeff Racine, Rob Hyndman: Using R to teach 
econometrics, Journal of Applied Econometrics 17 (2002), p. 176, 
http://www3.interscience.wiley.com/cgi-bin/fulltext/93514548/PDFSTART).
I there a discussion on R coding conventions taking place at the moment?

Best wishes,
Arne

> This naming scheme can well change when the S4 class/methods
> system is used (as it is more and more), since there, you
> construct objects rather by
>   new("<classname>",....),
>   as(obj, "<classname>", ....)
> etc.
>
> Regards,
> Martin Maechler <maechler at stat.math.ethz.ch>	http://stat.ethz.ch/~maechler/
> Seminar fuer Statistik, ETH-Zentrum  LEO C16	Leonhardstr. 27
> ETH (Federal Inst. Technology)	8092 Zurich	SWITZERLAND
> phone: x-41-1-632-3408		fax: ...-1228			<><
>
>     Arne> On Friday 26 September 2003 17:43, you wrote:
>     >> Hi, it looks from the names of your argument that your function is a
>     >> "plain function", i.e. it is not a function specific to a class. If
>     >> this is true, I would avoid the period and rename your function to
>     >>
>     >> solveLP <- function(cvec, bvec, Amat, maximum, maxiter, verbose) ...
>     >>
>     >> Under the S3 style of programming with classes methods coupled to
>     >> classes are written in the format
>     >>
>     >> method.class <- function(object, arg1, arg2, ...
>     >>
>     >> That is, the part before the period is the name of a generic
>     >> function and the part after is the name of the class. This is why R
>     >> CMD check believe your that you have written a method 'solve' for
>     >> class 'LP'. All methods named 'solve' should have a argument
>     >> signature that match the generic function 'solve' and your solve.LP
>     >> doesn't. I do not think this was your intention, correct? See
>     >> help.start() -> "R Language Definition"
>
>     -> "Object-oriented programming:" for more details about the S3 style.
>
>     >> To avoid problems like these I am working on a R Coding Conventions
>     >> (RCC), http://www.maths.lth.se/help/R/RCC/ (see Naming Conventions).
>     >> It is an early version and not everyone agrees with it, but the
>     >> intention is to find a style that avoid problems like yours, where
>     >> it says that you should avoid periods in function names except if
>     >> you use it for S3 class methods. Feedback is appreciated.
>     >>
>     >> Cheers
>     >>
>     >> Henrik Bengtsson
>     >> Lund University
>     >>
>     >> > -----Original Message-----
>     >> > From: r-help-bounces at stat.math.ethz.ch
>     >> > [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Arne
>     >> > Henningsen Sent: den 26 september 2003 17:03
>     >> > To: r-help at stat.math.ethz.ch
>     >> > Subject: [R] checking generic/method consistency
>     >> >
>     >> >
>     >> > Hi,
>     >> >
>     >> > I wrote a package for linear programming and want to submit
>     >> > it to CRAN.
>     >> > Since the package 'quadprog' has a function with the name
>     >> > 'solve.QP' to
>     >> > perform Quadratic Programming, I named my (main) function
>     >> > 'solve.LP'. However 'R CMD check' gives one warning:
>     >> >
>     >> > * checking generic/method consistency ... WARNING
>     >> > solve:
>     >> >   function(a, b, ...)
>     >> > solve.LP:
>     >> >   function(cvec, bvec, Amat, maximum, maxiter, verbose)
>     >> >
>     >> > while 'R CMD check' gives no warnings when the function has the
>     >> > name 'solve.QP'.
>     >> >
>     >> > What do you recommend me to do?
>     >> > 1) Ignore the warning and upload the package to CRAN as it is?
>     >> > 2) Rename the function? (any suggestions?)
>     >> > 3) Change something that avoids this problem without renaming
>     >> > the functions?
>     >> >
>     >> > I would prefer the third point, but I don't know how.
>     >> >
>     >> > Thank you for your answers,
>     >> >
>     >> > Arne
>     >> >
>     >> > --
>     >> > ______________________________________________
>     >> > R-help at stat.math.ethz.ch mailing list
>     >> > https://www.stat.math.ethz.ch/mailman/listinfo> /r-help
>
>     Arne> ______________________________________________
>     Arne> R-help at stat.math.ethz.ch mailing list
>     Arne> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help

-- 
Arne Henningsen
Department of Agricultural Economics
Christian-Albrechts-University Kiel
24098 Kiel, Germany
Tel: +49-431-880-4445
Fax: +49-431-880-1397 
ahenningsen at email.uni-kiel.de
http://www.uni-kiel.de/agrarpol/ahenningsen/




More information about the R-help mailing list