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@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel