From @gower @ending from bu@edu  Fri Oct 26 16:28:23 2018
From: @gower @ending from bu@edu (Gower, Adam)
Date: Fri, 26 Oct 2018 14:28:23 +0000
Subject: [Rd] Bug report for sealClass() in Core-maintained package
 "methods"
Message-ID: <DM6PR03MB3913C6D6439FA89D2FC351D8BEF00@DM6PR03MB3913.namprd03.prod.outlook.com>

Hello,
I was just reminded from a comment in some code that I had submitted this bug report last year, but it does not appear to have been addressed in R 3.5.0.
Can this please be fixed, or is there a specific reason that it cannot be addressed?
Thanks,
Adam

From: Gower, Adam
Sent: Monday, June 19, 2017 11:56 AM
To: 'r-devel at r-project.org'
Subject: 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]]



[Rd] Bug report for sealClass() in Core-maintained package "methods"
Gower, Adam