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@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to