From murdoch at stats.uwo.ca  Mon Jun  6 22:08:20 2005
From: murdoch at stats.uwo.ca (murdoch@stats.uwo.ca)
Date: Mon Jun  6 22:08:30 2005
Subject: [Rd] Bug in new() or validObject() in methods package (PR#7922)
Message-ID: <20050606200820.068F0A1C3@slim.kubism.ku.dk>

Something in new() or validObject() in the methods package is messing 
up.  This happens in both 2.1.0 and R-devel in Windows.


I'd like to have an empty expression for a slot in a class.  An empty
expression is an expression:

 > is.expression(expression())
[1] TRUE
 >
 > is(expression(), "expression")
[1] TRUE
 > class(expression())
[1] "expression"


However, when I try to use this as the initial value, I get an error
thrown back at me:

 > setClass("foo", representation(bar = "expression"))
[1] "foo"
 >
 > new("foo", bar = expression())
Error in validObject(.Object) : invalid class "foo" object: invalid 
object for slot "bar" in class "foo": got class "NULL", should be or 
extend class "expression"

Is it doing an extra eval or something?  It looks like it:

 > x <- expression()
 > x
expression()
 > eval(x)
NULL
 >
 > x <- quote(expression())
 > x
expression()
 > eval(x)
expression()
 > eval(eval(x))
NULL

However, it doesn't always happen:

 > new("foo", bar = expression(1+1))
An object of class "foo"
Slot "bar":
expression(1 + 1)

 > x <- expression(1+1)
 > x
expression(1 + 1)
 > eval(x)
[1] 2

Duncan Murdoch


[Rd] Bug in new() or validObject() in methods package (PR#7922)
murdoch@stats.uwo.ca