[Rd] validObject throws non-caught error when slot doesn't exist

Patrick Aboyoun paboyoun at fhcrc.org
Fri Jun 19 01:42:37 CEST 2009


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



More information about the R-devel mailing list