[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