Skip to content

Bug in new behaviour for all.equal and environments?

4 messages · Kevin Ushey, Rui Barradas, Duncan Murdoch +1 more

#
Hi R-devel,

The following code:

    all.equal(baseenv(), baseenv())

gives the error when run in a clean R session with latest R-devel (r66650):

    kevin:~$ R --vanilla --slave -e "all.equal(baseenv(), baseenv())"
    Error in all.equal.envRefClass(target[[i]], current[[i]],
check.attributes = check.attributes,  :
      attempt to apply non-function
    Calls: all.equal ... all.equal.list -> all.equal -> all.equal.envRefClass
    Execution halted

Although I don't know if it's helpful -- it appears that packages that
include some S4 machinery will effect the outcome of this error, e.g.
if we load 'Biobase' first:

    kevin:~$ R --vanilla --slave -e
"suppressPackageStartupMessages(library(Biobase));
all.equal(baseenv(), baseenv())"
    Error in target$getClass() : object '.refClassDef' not found
    Calls: all.equal ... all.equal.list -> all.equal ->
all.equal.envRefClass -> <Anonymous>
    Execution halted

We were bumping into an error with this in Rcpp -- we used all.equal
(through RUnit) to confirm that baseenv(), and a function returning
the base environment, would return TRUE.

For completeness:

    kevin:~$ R --vanilla --slave -e "sessionInfo()"
    R Under development (unstable) (2014-09-20 r66650)
    Platform: x86_64-apple-darwin13.3.0 (64-bit)

    locale:
    [1] en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8

    attached base packages:
    [1] stats     graphics  grDevices utils     datasets  methods   base

Thanks,
Kevin
#
Hello,

In R 3.1.1 on Windows 7 it's ok.

 > all.equal(baseenv(), baseenv())
[1] TRUE
 > sessionInfo()
R version 3.1.1 (2014-07-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=Portuguese_Portugal.1252 
LC_CTYPE=Portuguese_Portugal.1252
[3] LC_MONETARY=Portuguese_Portugal.1252 LC_NUMERIC=C 

[5] LC_TIME=Portuguese_Portugal.1252

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

Rui Barradas

Em 21-09-2014 18:06, Kevin Ushey escreveu:
#
On 21/09/2014, 1:38 PM, Rui Barradas wrote:
I'm not sure if that's really "ok", since it returns TRUE for any pair
of environments, e.g.

all.equal(baseenv(), emptyenv())

The current R-devel behaviour is temporary and certain to change.

Duncan Murdoch
1 day later
#

        
> On 21/09/2014, 1:38 PM, Rui Barradas wrote:
>> Hello,
    >> 
    >> In R 3.1.1 on Windows 7 it's ok.
    >> 
    >> > all.equal(baseenv(), baseenv()) [1] TRUE >
    >> sessionInfo() R version 3.1.1 (2014-07-10) Platform:
    >> x86_64-w64-mingw32/x64 (64-bit)

    > I'm not sure if that's really "ok", since it returns TRUE
    > for any pair of environments, e.g.

    > all.equal(baseenv(), emptyenv())

    > The current R-devel behaviour is temporary and certain to
    > change.

    > Duncan Murdoch

Indeed.  A bit more than an hour ago, I have committed several
changes to R-devel's behavior in dealing with objects such as 
 
 (rp <- getClass("refClass")@prototype)
 (ner <- new("envRefClass"))

both of which would not even correctly *print* in current R.
They now do in R-devel, also work with str() there, and

  all.equal(baseenv(), baseenv())

and many more cases of all.equal() with environments now work
there as well.

I still expect that creative useRs will be able to construct
cases where the new  all.equal() methods will fail, possibly
even end in an infinite loop (which is caught and leads to an
error).

Please use R-devel  svn rev >= 66668  for such experiments.

Thanking you for testing ...,
Martin Maechler
ETH Zurich



    >> [................]

    >> Rui Barradas
    >> 
    >> Em 21-09-2014 18:06, Kevin Ushey escreveu:
    >>> Hi R-devel,
    >>> 
    >>> The following code:
    >>> 
    >>> all.equal(baseenv(), baseenv())
    >>> 
    >>> gives the error when run in a clean R session with
    >>> latest R-devel (r66650):
    >>> 
    >>> kevin:~$ R --vanilla --slave -e "all.equal(baseenv(),
    >>> baseenv())" Error in all.equal.envRefClass(target[[i]],
    >>> current[[i]], check.attributes = check.attributes, :
    >>> attempt to apply non-function Calls: all.equal
    >>> ... all.equal.list -> all.equal -> all.equal.envRefClass
    >>> Execution halted
    >>> 
    >>> Although I don't know if it's helpful -- it appears that
    >>> packages that include some S4 machinery will effect the
    >>> outcome of this error, e.g.  if we load 'Biobase' first:
    >>> 
    >>> kevin:~$ R --vanilla --slave -e
    >>> "suppressPackageStartupMessages(library(Biobase));
    >>> all.equal(baseenv(), baseenv())" Error in
    >>> target$getClass() : object '.refClassDef' not found
    >>> Calls: all.equal ... all.equal.list -> all.equal ->
    >>> all.equal.envRefClass -> <Anonymous> Execution halted
    >>> 
    >>> We were bumping into an error with this in Rcpp -- we
    >>> used all.equal (through RUnit) to confirm that
    >>> baseenv(), and a function returning the base
    >>> environment, would return TRUE.
    >>> 
    >>> For completeness:
    >>> 
    >>> kevin:~$ R --vanilla --slave -e "sessionInfo()" R Under
    >>> development (unstable) (2014-09-20 r66650) Platform:
    >>> x86_64-apple-darwin13.3.0 (64-bit)
    >>> 
    >>> locale: [1]
    >>> en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8
    >>> 
    >>> attached base packages: [1] stats graphics grDevices
    >>> utils datasets methods base
    >>> 
    >>> Thanks, Kevin