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

Basil Abou El-Komboz Basil.Abou-El-Komboz at stat.uni-muenchen.de
Tue Sep 11 22:04:13 CEST 2012

    >> 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

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

    R> Michael

Oops, I was blind. Thanks for the answers and pointing me in the right
direction. Of course, this is not a problem of R but a problem of my
coding. ;)


More information about the R-devel mailing list