From jmc at r-project.org  Mon Jan 10 23:40:38 2005
From: jmc at r-project.org (John Chambers)
Date: Mon Jan 10 23:40:53 2005
Subject: [Rd] new("call") problem (PR#7490)
In-Reply-To: <20050110154708.BE2A4EAE1@slim.kubism.ku.dk>
References: <20050110154708.BE2A4EAE1@slim.kubism.ku.dk>
Message-ID: <41E30466.5020309@R-project.org>

Too bad you didn't stick to your earlier intention:

 > I'll leave it up to the developers to designate this as a bug or not,
 > but I would certainly prefer that new() and show() never reports errors
 > when an empty object is passed as an argument (of any class).

I agree, assuming what you mean by "empty" is the default object from 
the class.  But the issue is one of the behavior of the R evaluator, 
which wants to evaluate the call object when it's passed to the default 
print() code--just as the error message says.  We can maybe get around 
that, but I don't think your solution below is desirable.  There is a 
reason that the default function reference is called "<undef>":  an 
error _should_ be generated if you evaluate a call to an undefined function.

Notice:
R> tt <- new("call")
R> dput(tt)
"<undef>"()

This works as a show() method, but the current default printing code in 
R never calls show() for objects of class "call" so something else would 
have to be done, in the base package or the evaluator, rather than in 
methods.

R> setMethod("show", "call", function(object)dput(object))
[1] "show"
R> show(tt)
"<undef>"()
R> tt
Error in print("<undef>"()) : couldn't find function "<undef>"



Robert.McGehee@geodecapital.com wrote:
> I have found a solution to the new("call") problem that I believe
> produces the correct behavior for the default call object, and am also
> reclassifying this as a bug, as I believe the current behavior to be
> incorrect.
> 
> Recap, the following error occurs:
> 
>>new("call")
> 
> Error in print("<undef>"()) : couldn't find function "<undef>"
> 
> It looks like the problem is that the default object for new("call") is
> the function "<undef>"(), which does not exist. So, the show() and
> print() methods correspondingly fail.
> 
> If I initialize the "<undef>"() function at the beginning of my code to
> an empty function:
> 
> 
>>"<undef>" <- new("function")
> 
> 
> then new("call") will then reference an existing (yet empty) object that
> is coerced into a call, and the show and print methods correctly display
> this object as NULL. Furthermore, I am able to extend this empty call
> object to other S4 objects without trouble.
> 
> Now:
> 
>>"<undef>" <- new("function")
>>new("call")
> 
> NULL
> 
> 
>>str(new("call"))
> 
> Formal class 'call' [package "methods"] with 0 slots
>  list()
> 
> This, I believe is the preferred behavior of new("call"), and I would
> contend this fix should be included in the R source.
> 
> Best,
> Robert
> 
> -----Original Message-----
> From: McGehee, Robert [mailto:Robert.McGehee@geodecapital.com] 
> Sent: Saturday, January 08, 2005 6:06 PM
> To: r-devel@stat.math.ethz.ch
> Subject: [Rd] new("call") problem
> 
> 
> The below looks like the show method has trouble with the default call
> object (or that there is no default call object). Not sure if this is a
> bug, design problem, or a difficulty on my part using and extending the
> call class, but it has caused difficulty for when I want to extend the
> call class into other S4 classes.
> 
> 
>>new("call")
> 
> Error in print("<undef>"()) : couldn't find function "<undef>"
> 
> This error pops up when I show an object with an empty call slot.
> Error in show("<undef>"()) : Unable to find the argument "object" in
> selecting a method for function "show"
> 
> I'll leave it up to the developers to designate this as a bug or not,
> but I would certainly prefer that new() and show() never reports errors
> when an empty object is passed as an argument (of any class).
> 
> Best,
> Robert
> 
> Robert McGehee
> Geode Capital Management, LLC
> 53 State Street, 5th Floor | Boston, MA | 02109
> Tel: 617/392-8396    Fax:617/476-6389
> mailto:robert.mcgehee@geodecapital.com
> 
> 
> 
> This e-mail, and any attachments hereto, are intended for use by the
> addressee(s) only and may contain information that is (i) confidential
> information of Geode Capital Management, LLC and/or its affiliates,
> and/or (ii) proprietary information of Geode Capital Management, LLC
> and/or its affiliates. If you are not the intended recipient of this
> e-mail, or if you have otherwise received this e-mail in error, please
> immediately notify me by telephone (you may call collect), or by e-mail,
> and please permanently delete the original, any print outs and any
> copies of the foregoing. Any dissemination, distribution or copying of
> this e-mail is strictly prohibited.
> 
> ______________________________________________
> R-devel@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 
> ______________________________________________
> R-devel@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>


[Rd] new("call") problem (PR#7490)
John Chambers