Dear Gavin,

you and Hadley seem to be right. It looks like a problem which is buried deeper within R and the method dispatch. It seems like I have to reintroduce the class labeled.data.frame and plot.labeled.data.frame.

However, I will post on R-devel to try to understand this issue.

Thanks a lot!
Benjamin

Am 01.09.2015 um 17:54 schrieb Gavin Simpson:
It's not just plot.formula that is broken; plot.lm is dead too for
example. It's seems that just unexported methods fail to be called. This
works plot(ts(1:100)), correctly calling the plot.ts method.

What you must be doing overwriting the plot generic seems to be
clobbering S3 dispatch or killing the registration of those methods such
that they never get called.

I think you might need to take this to R Devel to ask what is happening
to S3 dispatch when you modify the generic (by providing your own),
unless someone else here knows what is going on?

If this isn't a problem in R, it looks like it would be easier all round
to follow Prof. Ripley's other advice/option and add a new class to
data.frame objects and provide a method for that new class...

HTH

G

On 1 September 2015 at 07:53, Benjamin Hofner <benjamin.hof...@fau.de
<mailto:benjamin.hof...@fau.de>> wrote:

    I am using it this way as I want to be able to plot data.frames but
    have a better display and more options. Thus, using plot.data.frame
    seems rather natural. A different function or new classes are just a
    work around. I do not want to use a new class as these functions
    should work on ANY data frame without coercion.

    Additionally, I had the function plot.data.frame [*] in an old
    versions of the package and would like to keep it for backward
    compatibility.

    [*] admittedly the function was plot.labeled.data.frame but I
    dropped the class labeled.data.frame as all my functions now work on
    regular data frames as well. If labels are present, these are used.
    If not, not.

    Benjamin

    Am 01.09.2015 um 15:44 schrieb Gavin Simpson:

        ...or have an object that is a data.frame but to which you add an
        additional class

        class(obj) <- c("my_df", "data.frame")

        Then you can include plot.my_df() in your package, plus a
        function to
        create a my_df object from a data frame, and you don't have to worry
        about all this and your objects will still work like data frames

        G

        On Sep 1, 2015 07:15, "Hadley Wickham" <h.wick...@gmail.com
        <mailto:h.wick...@gmail.com>
        <mailto:h.wick...@gmail.com <mailto:h.wick...@gmail.com>>> wrote:

             Why don't you just create your own function?

             Hadley

             On Tue, Sep 1, 2015 at 8:08 AM, Benjamin Hofner
             <benjamin.hof...@fau.de <mailto:benjamin.hof...@fau.de>
        <mailto:benjamin.hof...@fau.de <mailto:benjamin.hof...@fau.de>>>
        wrote:
              > Dear Gavin,
              >
              > unfortunately, I cannot overwrite plot.data.frame only.
        If I do
             this I
              > get the following warning from R CMD check:
              >
              > * checking use of S3 registration ... WARNING
              > Registered S3 method from a standard package overwritten
        by 'papeR':
              > method from
              > plot.data.frame graphics
              >
              > The reason for this is given in the following statement
        by Prof.
             Ripley:
              >
              >> Do not replace registered S3 methods from
        base/recommended packages,
              >> something which is not allowed by the CRAN policies and
        will mean
              >> that everyone gets your method even if your namespace
        is unloaded.
              >
              > The route I am taking is one of the advised routes to go
        (see
              > https://github.com/hofnerb/papeR/issues/5). So I am
        still looking
             for a fix
              > of this issue.
              >
              > Your warning regarding the changed user experience is
        well noted.
             However, I
              > think (and am aware that this is my personal opinion)
        that a lot
             of users
              > will not miss the standard plot.data.frame method which
        is only
             well defined
              > for numerics anyway and not very informative in many
        situations.
             After your
              > comment I am thinking of adding an option to my
        plot.data.frame
             function
              > which allows to fall back to the original user experience.
              >
              > Thanks,
              > Benjamin
              >
              > Am 01.09.2015 um 04:37 schrieb Gavin Simpson:
              >>
              >> Why do you even need to take over `plot`,
        `plot.default`? You
             can just
              >> register/export the plot.data.frame method from our
        package without
              >> touching the generic or default method. The part of WRE
        that you
             refer
              >> to is about making functions that are *not* S3 methods
        in one of
             base R
              >> or it's packages into S3 generics. You are just providing a
             method for
              >> an existing generic so you don't need to follow that code.
              >>
              >> That said, it wouldn't be good form to fundamentally
        alter the way
              >> plot.data.frame worked as users might expect certain
        functionality.
              >>
              >> HTH
              >>
              >> G
              >>
              >> On 31 August 2015 at 04:03, Benjamin Hofner
             <benjamin.hof...@fau.de <mailto:benjamin.hof...@fau.de>
        <mailto:benjamin.hof...@fau.de <mailto:benjamin.hof...@fau.de>>
              >> <mailto:benjamin.hof...@fau.de
        <mailto:benjamin.hof...@fau.de> <mailto:benjamin.hof...@fau.de
        <mailto:benjamin.hof...@fau.de>>>>

             wrote:
              >>
              >>     Dear all,
              >>
              >>     CRAN policies do not allow that single methods (for
        generic
              >>     functions) which are defined in base or recommended
        packages are
              >>     replaced. They advice package authors to replace
        the standard
              >>     generic and use a xxx.default method which then
        calls the
             original
              >>     standard generic.
              >>
              >>     Using the following code
              >>
              >>
              >>     ## overwrite standard generic
              >>     plot <- function(x, y, ...)
              >>          UseMethod("plot")
              >>
              >>     ## per default fall back to standard generic
              >>     plot.default <- function(x, y, ...)
              >>          graphics::plot(x, y, ...)
              >>
              >>     ## now specify modified plot function for data frames
              >>     plot.data.frame <- function(x, variables =
        names(x), ...)
              >>
              >>
              >>     essentially works for all tested plot.xxx
        functions. Yet, it
             breaks
              >>     plot.formula. How can I proceed to overwrite
        plot.data.frame
             without
              >>     breaking plot.formula. Any help is greatly appreciated.
              >>
              >>     For a detailed description of the problem with syntax
             highlighting
              >>     and code to reproduce the problem please see:
              >>
              >>
              >>
        
http://stackoverflow.com/questions/32246361/redefinition-of-generic-for-plot-function-breaks-plot-formula
              >>
              >>     Best,
              >>     Benjamin
              >>     --
              >>
              >>

        
******************************************************************************
              >>     Dr. rer. nat. Benjamin Hofner
              >>
              >>     Institut für Medizininformatik, Biometrie und
        Epidemiologie
              >>     Friedrich-Alexander-Universität Erlangen-Nürnberg
              >>     Waldstr. 6 - 91054 Erlangen - Germany
              >>
              >>     Tel: +49-9131-85-22707 <tel:%2B49-9131-85-22707>
        <tel:%2B49-9131-85-22707>
             <tel:%2B49-9131-85-22707>
              >>     Fax: +49-9131-85-25740 <tel:%2B49-9131-85-25740>
        <tel:%2B49-9131-85-25740>
             <tel:%2B49-9131-85-25740>
              >>
              >>     Büro:
              >>        Raum 3.036
              >>        Universitätsstraße 22
              >>        (Eingang linke Seite des Gebäudes; Wegweiser IMBE)
              >>
              >> benjamin.hof...@fau.de <mailto:benjamin.hof...@fau.de>
        <mailto:benjamin.hof...@fau.de <mailto:benjamin.hof...@fau.de>>
             <mailto:benjamin.hof...@fau.de
        <mailto:benjamin.hof...@fau.de> <mailto:benjamin.hof...@fau.de
        <mailto:benjamin.hof...@fau.de>>>
              >>
              >>
        http://www.imbe.med.uni-erlangen.de/cms/benjamin_hofner.html
              >> http://www.benjaminhofner.de
              >>
              >>     ______________________________________________
              >> R-package-devel@r-project.org
        <mailto:R-package-devel@r-project.org>
             <mailto:R-package-devel@r-project.org
        <mailto:R-package-devel@r-project.org>>
             <mailto:R-package-devel@r-project.org
        <mailto:R-package-devel@r-project.org>
             <mailto:R-package-devel@r-project.org
        <mailto:R-package-devel@r-project.org>>>
              >>     mailing list
              >> https://stat.ethz.ch/mailman/listinfo/r-package-devel
              >>
              >>
              >>
              >>
              >> --
              >> Gavin Simpson, PhD
              >
              >
              > ______________________________________________
              > R-package-devel@r-project.org
        <mailto:R-package-devel@r-project.org>
             <mailto:R-package-devel@r-project.org
        <mailto:R-package-devel@r-project.org>> mailing list
              > https://stat.ethz.ch/mailman/listinfo/r-package-devel



             --
        http://had.co.nz/


    --
    
******************************************************************************
    Dr. rer. nat. Benjamin Hofner

    Institut für Medizininformatik, Biometrie und Epidemiologie
    Friedrich-Alexander-Universität Erlangen-Nürnberg
    Waldstr. 6 - 91054 Erlangen - Germany

    Tel: +49-9131-85-22707 <tel:%2B49-9131-85-22707>
    Fax: +49-9131-85-25740 <tel:%2B49-9131-85-25740>

    Büro:
       Raum 3.036
       Universitätsstraße 22
       (Eingang linke Seite des Gebäudes; Wegweiser IMBE)

    benjamin.hof...@fau.de <mailto:benjamin.hof...@fau.de>

    http://www.imbe.med.uni-erlangen.de/cms/benjamin_hofner.html
    http://www.benjaminhofner.de
    
******************************************************************************




--
Gavin Simpson, PhD

--
******************************************************************************
Dr. rer. nat. Benjamin Hofner

Institut für Medizininformatik, Biometrie und Epidemiologie
Friedrich-Alexander-Universität Erlangen-Nürnberg
Waldstr. 6 - 91054 Erlangen - Germany

Tel: +49-9131-85-22707
Fax: +49-9131-85-25740

Büro:
  Raum 3.036
  Universitätsstraße 22
  (Eingang linke Seite des Gebäudes; Wegweiser IMBE)

benjamin.hof...@fau.de

http://www.imbe.med.uni-erlangen.de/cms/benjamin_hofner.html
http://www.benjaminhofner.de

______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

Reply via email to