[Rd] R crashes when printing a named numeric vector of a specific class - Bug?
Milan Bouchet-Valat
nalimilan at club.fr
Tue Sep 11 17:35:48 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
> --------------------------------------------------
>
> 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
More information about the R-devel
mailing list