[Rd] S4 / S3 / Sweave problem
Martin Maechler
maechler at stat.math.ethz.ch
Mon May 5 10:10:23 CEST 2008
>>>>> "PaulG" == Paul Gilbert <pgilbert at bank-banque-canada.ca>
>>>>> on Sun, 04 May 2008 21:46:18 -0400 writes:
PaulG> Prof Brian Ripley wrote:
>> I'm not sure what the issue being asked about here is. The peculiar
>> printing I don't see and may well be a locale issue. (Is this UTF-8 and
>> TeX has not been told so?)
PaulG> It seems to happen in locales UTF-8, POSIX and C. I have not tried others.
>>
>> The other issue is that when printing an object with attributes, there
>> is no consideration of S4 classes amongst the attributes. That was
>> either an undocumented design decision or an omission. This is
>> different from
>>
>>> print(attributes(zz))
>> $tsp
>> [1] 1 10 1
>>
>> $class
>> [1] "ts"
>>
>> $Meta
>> An object of class “TSmetax”
>> Slot "serIDs":
>> [1] "whatever"
>>
>> Slot "ExtractionDate":
>> NULL
>>
>> since although attributes are internally a pairlist and printed by a
>> special C function, attributes() returns a list.
>>
>> It would be fairly easy to include a branch for S4 objects, but there
>> are ambuiguities still over what they are (I wrote up a set of questions
>> over a year ago about this). But it would seem fairly safe to send them
>> to show() in the same circumstances that autoprinting does for
>> apparently S4 objects.
PaulG> Yes, I do have the impression that print() does not do exactly what one
PaulG> might like when it finds an S4 attribute in an S3 object. I hope this is
PaulG> not a design decision. It would make it very difficult to migrate toward
PaulG> S4 if it is not possible to include S4 objects in S3 objects this way.
I'm pretty sure that this has *not* been a design decision, but
rather an oversight till now.
To me, it seems even a "natural" oversight: If you are working
for fully designed classes, it seems awkward to simultaneously
use attributes of S3- (or "no class"-) objects.
I do understand though that there can be situations, in
particular migrations ones, where you want to do this ... and
should be allowed to and should see print() working.
Martin
>> On Sun, 4 May 2008, Paul Gilbert wrote:
>>
>>> I'm not sure if this as a bug or something I am doing wrong. It occurs
>>> in both 2.7.0 and 2.6.2.
>>
>> My guess is that it was never intended that S4 objects be used as
>> attributes, in the same way that one of the unanswered questions is if S4
>> objects should be allowed to have attributes (other than slots).
>>
>>>
>>> require("methods")
>>>
>>> setClassUnion("OptionalPOSIXct", c("POSIXct", "NULL"))
>>>
>>> setClass("TSmetax",
>>> representation(serIDs="character", ExtractionDate="OptionalPOSIXct" ))
>>>
>>> setGeneric("TSmetax",
>>> def= function(x, ...) standardGeneric("TSmetax"))
>>>
>>> setMethod("TSmetax", signature(x="character"),
>>> definition= function(x, ...){
>>> new("TSmetax", serIDs=x, ExtractionDate=Sys.time())
>>> } )
>>>
>>>> z <- new("TSmetax", serIDs="whatever", ExtractionDate= NULL)
>>>> print(z)
>>> An object of class "TSmetax"
>>> Slot "serIDs":
>>> [1] "whatever"
>>>
>>> Slot "ExtractionDate":
>>> NULL
>>>
>>> Now if I make this an attribute of an S3 class an print, I get
>>>> zz <- ts(1:10)
>>>> attr(zz, "Meta") <- z
>>>> print(zz)
>>> Time Series:
>>> Start = 1
>>> End = 10
>>> Frequency = 1
>>> [1] 1 2 3 4 5 6 7 8 9 10
>>> attr(,"Meta")
>>> <S4 Type Object>
>>> attr(,"serIDs")
>>> [1] "whatever"
>>> attr(,"ExtractionDate")
>>> `NULL`
>>> attr(,"class")
>>> [1] "TSmetax"
>>> attr(,"class")attr(,"package")
>>> [1] ".GlobalEnv"
>>>>
>>>
>>> The `NULL` shows up i
>>> shows up in the tex file generated by a vignette as
>>> <soh>NULL<soh> which causes tex (pdftex) to throw an error.
>>> (It also seems to mess up my mail tool, so I hope this goes through.)
>>
>>
PaulG> ====================================================================================
PaulG> La version française suit le texte anglais.
PaulG> ------------------------------------------------------------------------------------
PaulG> This email may contain privileged and/or confidential information, and the Bank of
PaulG> Canada does not waive any related rights. Any distribution, use, or copying of this
PaulG> email or the information it contains by other than the intended recipient is
PaulG> unauthorized. If you received this email in error please delete it immediately from
PaulG> your system and notify the sender promptly by email that you have done so.
PaulG> ------------------------------------------------------------------------------------
PaulG> Le présent courriel peut contenir de l'information privilégiée ou confidentielle.
PaulG> La Banque du Canada ne renonce pas aux droits qui s'y rapportent. Toute diffusion,
PaulG> utilisation ou copie de ce courriel ou des renseignements qu'il contient par une
PaulG> personne autre que le ou les destinataires désignés est interdite. Si vous recevez
PaulG> ce courriel par erreur, veuillez le supprimer immédiatement et envoyer sans délai à
PaulG> l'expéditeur un message électronique pour l'aviser que vous avez éliminé de votre
PaulG> ordinateur toute copie du courriel reçu.
PaulG> ______________________________________________
PaulG> R-devel at r-project.org mailing list
PaulG> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list