[Rd] R crashes when printing a named numeric vector of a specific class - Bug?

R. Michael Weylandt michael.weylandt at gmail.com
Tue Sep 11 17:52:00 CEST 2012


On Tue, Sep 11, 2012 at 4:35 PM, Milan Bouchet-Valat <nalimilan at club.fr> wrote:
> Le mardi 11 septembre 2012 à 16:53 +0200, Basil Abou El-Komboz a écrit :
>> Dear useR's,
>>
>> today I stumbled over an interesting phenomenon: First, I created a
>> named numeric vector with a certain class and several attributes via the
>> structure() function. After that, I implemented a simple print method
>> for this class. When calling this function it produces an endless loop
>> of print calls until R crashes. :/
>>
>> What is going on here? Is this a bug or have I done something completely
>> wrong? :)
>>
>> Below is a minimal example which reproduces the behavior. Be careful
>> when calling foo() as this automatically calls print.bar() which causes
>> R to crash (at least on my PC, see further informations about my system below.)
>>
>> Greetings,
>> Basil
>>
>> --------------------------------------------------
>>
>> Minimal example:
>>
>> foo <- function () {
>>  x <- c("A" = 1.3, "B" = 0.7, "C" = -0.3)
>>  structure(x, class = "bar")
>> }
>>
>> print.bar <- function (x, ...) {
>>   print(x, ...)
>> }
> What is your code supposed to do exactly? ;-)
>
> You're calling print() in your class' print.bar() function, so calling
> print() on such an object will call print.bar(), which calls print(),
> which calls print.bar()... In a few moments the recursion will have gone
> so deep that some system limit about the stack size must be reached, and
> R is killed.
>
> If you just want to print the object as a vector, you do not need to
> define any function. Or, at least, call print.default() instead of the
> generic print().
>
>
> My two cents
>

NextMethod() may also be of some help here, depending on the
inheritance you're envisioning.

Michael



More information about the R-devel mailing list