From mtmorgan at fredhutch.org  Tue Jul  7 21:01:20 2015
From: mtmorgan at fredhutch.org (Martin Morgan)
Date: Tue, 07 Jul 2015 12:01:20 -0700
Subject: [Rd] List S3 methods and defining packages
In-Reply-To: <CAHavPHE_A=Ynngg41MnUnWxDUvq47LwT4HYwPGiJYXoSLO5BKw@mail.gmail.com>
References: <CAHavPHE_A=Ynngg41MnUnWxDUvq47LwT4HYwPGiJYXoSLO5BKw@mail.gmail.com>
Message-ID: <559C2200.4070305@fredhutch.org>

On 07/07/2015 02:05 AM, Renaud Gaujoux wrote:
> Hi,
>
> from the man page ?methods, I expected to be able to build pairs
> (class,package) for a given S3 method, e.g., print, using
>
> attr(methods(print), 'info').
>
> However all the methods, except the ones defined in base or S4
> methods, get the 'from' value "registered S3method for print", instead
> of the actual package name (see below for the first rows).
>
> Is this normal behaviour? If so, is there a way to get what I want: a
> character vector mapping class to package (ideally in loading order,
> but this I can re-order from search()).

It's the way it has always been, so normal in that sense.

There could be two meanings of 'from' -- the namespace in which the generic to 
which the method belongs is defined, and the namespace in which the method is 
defined. I think the former is what you're interested in, but the latter likely 
what methods() might be modified return.

For your use case, maybe something like

     .S3methodsInNamespace <- function(envir, pattern) {
         mtable <- get(".__S3MethodsTable__.", envir = asNamespace(envir))
         methods <- ls(mtable, pattern = pattern)
         env <- vapply(methods, function(x) {
             environmentName(environment(get(x, mtable)))
         }, character(1))
         setNames(names(env), unname(env))
     }


followed by

   nmspc = loadedNamespaces()
   lapply(setNames(nmspc, nmspc), .S3methodsInNamespace, "^plot.")

which reveals the different meanings of 'from', e.g.,

 > lapply(setNames(nmspc, nmspc), .S3methodsInNamespace, "^plot.")["graphics"]
$graphics
                stats             graphics                stats
           "plot.acf"    "plot.data.frame" "plot.decomposed.ts"
             graphics                stats                stats
       "plot.default"    "plot.dendrogram"       "plot.density"
                stats             graphics             graphics
          "plot.ecdf"        "plot.factor"       "plot.formula"
             graphics                stats             graphics
      "plot.function"        "plot.hclust"     "plot.histogram"
                stats                stats                stats
   "plot.HoltWinters"        "plot.isoreg"            "plot.lm"
                stats                stats                stats
     "plot.medpolish"           "plot.mlm"           "plot.ppr"
                stats                stats                stats
        "plot.prcomp"      "plot.princomp"   "plot.profile.nls"
             graphics                stats                stats
        "plot.raster"          "plot.spec"       "plot.stepfun"
                stats             graphics                stats
           "plot.stl"         "plot.table"            "plot.ts"
                stats                stats
      "plot.tskernel"      "plot.TukeyHSD"

Also this is for loaded, rather than attached, namespaces.

Martin Morgan

> Thank you.
>
> Bests,
> Renaud
>
>                                               visible
>         from generic  isS4
> print.abbrev                                   FALSE registered
> S3method for print   print FALSE
> print.acf                                      FALSE registered
> S3method for print   print FALSE
> print.AES                                      FALSE registered
> S3method for print   print FALSE
> print.agnes                                    FALSE registered
> S3method for print   print FALSE
> print.anova                                    FALSE registered
> S3method for print   print FALSE
> print.Anova                                    FALSE registered
> S3method for print   print FALSE
> print.anova.loglm                              FALSE registered
> S3method for print   print FALSE
> print,ANY-method                                TRUE
>         base   print  TRUE
> print.aov                                      FALSE registered
> S3method for print   print FALSE
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>


-- 
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109

Location: Arnold Building M1 B861
Phone: (206) 667-2793



[Rd] List S3 methods and defining packages
Martin Morgan