Thank you for your reply Martin. Your code made me realize that S3 methods are added to the .__S3MethodsTable__. of the package that defines the generic, not to the ones defining the method itself. How does things work in the case of a method from one package B masking the one from another package A? I don't get any warning message and there seems to be only one entry in the relevant .__S3MethodsTable__. Aren't these tables updated when the masking package B is detached?
On 7 July 2015 at 21:01, Martin Morgan <mtmor...@fredhutch.org> wrote: > 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