Gower, Adam
2017-Jun-19 15:55 UTC
[Rd] Bug report for sealClass() in Core-maintained package "methods"
Hello, I have found that I cannot use sealClass() without specifying the 'where' argument. I have found this issue in R 3.2.3 and R 3.4.0. For example:> setClass("foo", slots=c(name="character", age="integer")) > isSealedClass("foo")[1] FALSE> sealClass("foo")Error in list2env(list(<environment>), NULL, <environment>) : names(x) must be a character vector of the same length as x> isSealedClass("foo")[1] FALSE> sealClass("foo", where=.GlobalEnv) > isSealedClass("foo")[1] TRUE I found that this is because sealClass() includes the following line: if (missing(where)) where <- findClass(Class, unique = "sealing the class", where = where) Because findClass() always returns a list (even if argument 'unique' contains a character string), this assigns a list of length 1 to variable 'where'. This then throws an error in the subsequent line assignClassDef(Class, classDef, where) For this reason, the abovementioned line should instead read: if (missing(where)) where <- findClass(Class, unique = "sealing the class", where = where)[[1]] Thanks very much, Adam Gower agower at bu.edu<mailto:agower at bu.edu> [[alternative HTML version deleted]]