[Rd] another S4 question ...
Ben Bolker
bolker at zoo.ufl.edu
Tue Dec 11 18:07:08 CET 2007
Agreed. It turns out a similar hack is done in the lme4
package for printMer ...
Martin Morgan wrote:
> Ben --
>
> My vote would be against overriding the generic for show. If for some
> reason your version proves inadequate, you force the user to
> (conditional on loading your package) disambiguate 'show' to get the
> methods package behavior.
>
> ?show says in part
>
> Formal methods for 'show' will usually be invoked for automatic
> printing (see the details).
>
> and it's difficult to provide ... with automatic printing. On the
> other hand, the naive user is probably expecting to be able to print()
> your object (much as they are expecting to use 'as' rather than
> 'coerce'). ?show goes on to say
>
> The 'methods' package overrides the base definition of
> 'print.default' to arrange for automatic printing to honor methods
> for the function 'show'. This does not quite manage to override
> old-style printing methods, since the automatic printing in the
> evaluator will look first for the old-style method.
>
> and the following might be a different solution
>
>> setClass("A", representation=representation(x="numeric"))
> [1] "A"
>> print.A <- function(x, ...) cat("an A\n")
>> print(new("A"))
> an A
>
> Another solution might be
>
>> rm(print.A)
>> setMethod("print", "A", function(x, ...) cat("another A\n"))
> Creating a new generic function for "print" in ".GlobalEnv"
> [1] "print"
>> print(new("A"))
> another A
>
> This creates a 'print' generic with an identical signature to 'print',
> which might be marginally better than creating another generic (for
> 'show') with a different signature. I think I'd still go with the
> S3-style print, even though it mixes object systems, because it seems
> to have the least potential to interfere with other packages.
>
> Martin
>
>
> Ben Bolker <bolker at zoo.ufl.edu> writes:
>
>> The default generic method for "show" has arguments
>> show(object) -- (no "...") -- which precludes any kind
>> of arguments like "digits", etc.
>>
>> Is it impossible, or a horrible idea, to override the
>> generic definition? (The "arm" package has defined a
>> new generic, "display", which does a similar thing but
>> has an intermediate level of detail (between "print/show"
>> and "summary")
>>
>> Ben Bolker
>>
>>
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 252 bytes
Desc: OpenPGP digital signature
Url : https://stat.ethz.ch/pipermail/r-devel/attachments/20071211/f3a5cb42/attachment.bin
More information about the R-devel
mailing list