On Sat, 11 Dec 2004, John Fox wrote:
Thanks for this. I'll give your new definition of isS4object() a try. The function is used in my Rcmdr package, which provides a basic-statistics GUI for R. When an object -- the result of executing a command -- is printed, I test whether it is an S4 object to decide whether to use show() or print().
I think that *if* you have methods attached, it is OK there to always call show(). (You will not be using extra args to print(), e.g. digits, I presume.) show() will call S3 methods for print() if it is given a non-S4 classed object.
(Sorry, if I had realised what this about, I should have said that earlier.)
As I understand it (and I wrote some of it)
- auto-printing looks for an S4 object, and if it finds one, calls show(), otherwise calls the internals of print(). That test is at C level, and is
if(tryS4 && isObject(x) && isMethodsDispatchOn()) { SEXP class = getAttrib(x, R_ClassSymbol); if(length(class) == 1) { /* internal version of isClass() */ char str[201]; snprintf(str, 200, ".__C__%s", CHAR(STRING_ELT(class, 0))); if(findVar(install(str), rho) != R_UnboundValue) callShow = TRUE; } }
where tryS4 is to ensure this is tried only once. So an object is an S4 object on which show() is to be called if it has a properly registered (S3 or S4) class (the object bit, tested by isObject) of length one, and the class is registered by the methods code.
- show() calls print.default if it finds an S3 object, or an unclassed object.
- print.default() with only one arg calls show().
- If you have an S4 class and both show() and print() methods, auto-printing calls the show() method and explicit print()ing calls
the print() method. Not a good idea, but it has happened in contributed packages.
Brian
-- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595
______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-devel