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@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

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

Reply via email to