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

From: Milan Bouchet-Valat <nalimilan_at_club.fr>
Date: Tue, 11 Sep 2012 17:35:48 +0200

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

> --------------------------------------------------
>
> Further informations about my system:
>
> > version
> _
> platform x86_64-unknown-linux-gnu
> arch x86_64
> os linux-gnu
> system x86_64, linux-gnu
> status
> major 2
> minor 15.1
> year 2012
> month 06
> day 22
> svn rev 59600
> language R
> version.string R version 2.15.1 (2012-06-22)
> nickname Roasted Marshmallows
>
> > sessionInfo()
>
> R version 2.15.1 (2012-06-22)
> Platform: x86_64-unknown-linux-gnu (64-bit)
>
> locale:
> [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.UTF-8
> [6] LC_MESSAGES=en_US.UTF-8 LC_PAPER=C LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C
> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
>
> attached base packages:
> [1] stats graphics grDevices utils datasets methods base
>
> loaded via a namespace (and not attached):
> [1] compiler_2.15.1 tools_2.15.1
>
> ______________________________________________
> R-devel_at_r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue 11 Sep 2012 - 15:38:04 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 11 Sep 2012 - 16:10:41 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive