[Rd] validObject throws non-caught error when slot doesn't exist
John Chambers
jmc at r-project.org
Fri Jun 19 18:31:48 CEST 2009
A fix for this and related problems is now committed (r48803).
Some of the interesting ways that validObject() could fail previously
are in the attached regression-test file.
John
John Chambers wrote:
> Patrick,
>
> Thanks for the bug report and the proposed patch.
>
> There are some related ways that validObject can fail (e.g., if the
> revised class definition extends one of the object types or if the
> object is an S3 object), so the patch needs to be a little more
> general, but I will commit something to the 2.10 development version
> and send mail).
>
> John
>
> Patrick Aboyoun wrote:
>> I have been retooling an S4 class definition to include another slot
>> and have found that the methods::validObject function (defined in
>> methods/R/SClasses.R) in R-devel throws an error that isn't caught
>> internally (and thus not controllable by 'test' argument) when
>> retrieving a non-existent slot. The offending line of code is shown
>> below:
>>
>> > validObject
>> function (object, test = FALSE, complete = FALSE)
>> {
>> ...
>> for (i in seq_along(slotTypes)) {
>> classi <- slotTypes[[i]]
>> sloti <- slot(object, slotNames[[i]]) # offending line of code
>>
>> One potential patch is to substitute the offending line with
>>
>> sloti <- try(slot(object, slotNames[[i]]), silent = TRUE)
>> if (class(sloti) == "try-error") {
>> errors <- c(errors, paste("missing slot \"", slotNames[[i]],
>> "\"", sep = ""))
>> next
>> }
>>
>> Here is a reproduce and an example using vaildObject2 that
>> substitutes the offending line with the code given above:
>>
>> > setClass("Foo", representation(bar = "character"))
>> [1] "Foo"
>> > a <- new("Foo", bar = letters)
>> > setClass("Foo", representation(bar = "character", star = "numeric"))
>> [1] "Foo"
>> > validObject(a, test = TRUE)
>> Error in slot(object, slotNames[[i]]) :
>> no slot of name "star" for this object of class "Foo"
>> > validObject2(a, test = TRUE)
>> [1] "missing slot \"star\""
>> > sessionInfo()
>> R version 2.10.0 Under development (unstable) (2009-06-12 r48755)
>> i386-apple-darwin9.6.0
>>
>> locale:
>> [1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8
>>
>> attached base packages:
>> [1] stats graphics grDevices utils datasets methods base
>>
>> Patrick
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: testValidSlot.R
URL: <https://stat.ethz.ch/pipermail/r-devel/attachments/20090619/1b2bf22f/attachment.pl>
More information about the R-devel
mailing list