[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