Re: [Rd] Implicit vs explicit printing and the call stack

From: Gabor Grothendieck <ggrothendieck_at_gmail.com>
Date: Sat, 12 May 2007 11:25:29 -0400

I can't reproduce that with ggplot 0.4-0 as some of the functions you are using do not appear to be part of ggplot (I suspect you are using a newer version of ggplot than you have released) but the following illustrates the difference using "R version 2.5.0 Patched (2007-05-01 r41405)" and lattice 0.15-5 and grid 2.5-0 on Windows XP:

library(lattice)

xyplot(conc ~ uptake, CO2, xlim = Inf)
traceback()

print(xyplot(conc ~ uptake, CO2, xlim = Inf)) traceback()

On 5/12/07, hadley wickham <h.wickham_at_gmail.com> wrote:
> Hi everyone,
>
> I've run into a bit of strange problem with implicit vs explicit
> printing and the call stack. I've included an example at the bottom of
> this email. The basic problem is that I have an S3 object with a
> print method. When the object is implicitly printed (ie. typed
> directly into the console) the function arguments in the call stack
> are exploded out to their actual values, rather than just the name I
> typed in (see below for an example if my language is confusing). When
> I explicitly "print" the object, the call stack is fine.
>
> This is not just of academic interest, because with a larger dataset
> and an implicit print, there is a noticeable delay before control
> returns to the prompt (I can't quantify it exactly because
> system.time requires a explicit print, but it's on the order of a few
> seconds).
>
> I'm not sure if I've provided enough information to be able to solve
> the problem, so please let me know what additional details would be
> useful.
>
> Thanks,
>
> Hadley
>
>
> > ggplot(mtcars, aes(x=cyl, y=-mpg)) + scale_y_log10() + geom_point()
> Error in grid.pretty(.$domain()) : infinite axis extents [GEPretty(-inf,inf,5)]
> In addition: Warning messages:
> 1: NaNs produced in: log(x, base)
> 2: no non-missing arguments to min; returning Inf
> 3: no non-missing arguments to max; returning -Inf
> 4: no non-missing arguments to min; returning Inf
> 5: no non-missing arguments to max; returning -Inf
> > traceback()
> 16: .Call(L_pretty, range)
> 15: grid.pretty(.$domain())
> 14: get("breaks", env = .$y(), inherits = TRUE)(.$y(), ...)
> 13: .$y()$breaks()
> 12: range(at)
> 11: as.numeric(x)
> 10: unit(range(at), "native")
> 9: ggaxis_line(at, position)
> 8: ggaxis(.$y()$breaks(), .$y()$labels(), "left", range$y)
> 7: get("guide_axes", env = coordinates, inherits = TRUE)(coordinates,
> ...)
> 6: coordinates$guide_axes()
> 5: guides_basic(plot, scales, cs)
> 4: ggplot_plot(x, ...)
> 3: grid.draw(ggplot_plot(x, ...))
> 2: print.ggplot(list(data = list(mpg = c(21, 21, 22.8, 21.4, 18.7,
> 18.1, 14.3, 24.4, 22.8, 19.2, 17.8, 16.4, 17.3, 15.2, 10.4, 10.4,
> 14.7, 32.4, 30.4, 33.9, 21.5, 15.5, 15.2, 13.3, 19.2, 27.3, 26,
> 30.4, 15.8, 19.7, 15, 21.4), cyl = c(6, 6, 4, 6, 8, 6, 8, 4,
> 4, 6, 6, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 8, 8, 8, 8, 4, 4, 4, 8,
> 6, 8, 4), disp = c(160, 160, 108, 258, 360, 225, 360, 146.7,
> 140.8, 167.6, 167.6, 275.8, 275.8, 275.8, 472, 460, 440, 78.7,
> 75.7, 71.1, 120.1, 318, 304, 350, 400, 79, 120.3, 95.1, 351,
> 145, 301, 121), hp = c(110, 110, 93, 110, 175, 105, 245, 62,
> 95, 123, 123, 180, 180, 180, 205, 215, 230, 66, 52, 65, 97, 150,
> 150, 245, 175, 66, 91, 113, 264, 175, 335, 109), drat = c(3.9,
> 3.9, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.92, 3.92, 3.07,
> 3.07, 3.07, 2.93, 3, 3.23, 4.08, 4.93, 4.22, 3.7, 2.76, 3.15,
> 3.73, 3.08, 4.08, 4.43, 3.77, 4.22, 3.62, 3.54, 4.11), wt = c(2.62,
> 2.875, 2.32, 3.215, 3.44, 3.46, 3.57, 3.19, 3.15, 3.44, 3.44,
> 4.07, 3.73, 3.78, 5.25, 5.424, 5.345, 2.2, 1.615, 1.835, 2.465,
> 3.52, 3.435, 3.84, 3.845, 1.935, 2.14, 1.513, 3.17, 2.77, 3.57,
> 2.78), qsec = c(16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84,
> 20, 22.9, 18.3, 18.9, 17.4, 17.6, 18, 17.98, 17.82, 17.42, 19.47,
> 18.52, 19.9, 20.01, 16.87, 17.3, 15.41, 17.05, 18.9, 16.7, 16.9,
> 14.5, 15.5, 14.6, 18.6), vs = c(0, 0, 1, 1, 0, 1, 0, 1, 1, 1,
> 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
> 1), am = c(1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1), gear = c(4, 4,
> 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3,
> 3, 3, 4, 5, 5, 5, 5, 5, 4), carb = c(4, 4, 1, 1, 2, 1, 4, 2,
> 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2, 2, 4, 2, 1, 2, 2, 4,
> 6, 8, 2)), layers = list(<environment>), scales = <environment>,
> defaults = list(x = cyl, y = -mpg), title = NULL, fixedaspect = FALSE,
> coordinates = <environment>, formula = ". ~ .", margins = FALSE))
> 1: print(list(data = list(mpg = c(21, 21, 22.8, 21.4, 18.7, 18.1,
> 14.3, 24.4, 22.8, 19.2, 17.8, 16.4, 17.3, 15.2, 10.4, 10.4, 14.7,
> 32.4, 30.4, 33.9, 21.5, 15.5, 15.2, 13.3, 19.2, 27.3, 26, 30.4,
> 15.8, 19.7, 15, 21.4), cyl = c(6, 6, 4, 6, 8, 6, 8, 4, 4, 6,
> 6, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 8, 8, 8, 8, 4, 4, 4, 8, 6, 8,
> 4), disp = c(160, 160, 108, 258, 360, 225, 360, 146.7, 140.8,
> 167.6, 167.6, 275.8, 275.8, 275.8, 472, 460, 440, 78.7, 75.7,
> 71.1, 120.1, 318, 304, 350, 400, 79, 120.3, 95.1, 351, 145, 301,
> 121), hp = c(110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123,
> 180, 180, 180, 205, 215, 230, 66, 52, 65, 97, 150, 150, 245,
> 175, 66, 91, 113, 264, 175, 335, 109), drat = c(3.9, 3.9, 3.85,
> 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.92, 3.92, 3.07, 3.07, 3.07,
> 2.93, 3, 3.23, 4.08, 4.93, 4.22, 3.7, 2.76, 3.15, 3.73, 3.08,
> 4.08, 4.43, 3.77, 4.22, 3.62, 3.54, 4.11), wt = c(2.62, 2.875,
> 2.32, 3.215, 3.44, 3.46, 3.57, 3.19, 3.15, 3.44, 3.44, 4.07,
> 3.73, 3.78, 5.25, 5.424, 5.345, 2.2, 1.615, 1.835, 2.465, 3.52,
> 3.435, 3.84, 3.845, 1.935, 2.14, 1.513, 3.17, 2.77, 3.57, 2.78
> ), qsec = c(16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84,
> 20, 22.9, 18.3, 18.9, 17.4, 17.6, 18, 17.98, 17.82, 17.42, 19.47,
> 18.52, 19.9, 20.01, 16.87, 17.3, 15.41, 17.05, 18.9, 16.7, 16.9,
> 14.5, 15.5, 14.6, 18.6), vs = c(0, 0, 1, 1, 0, 1, 0, 1, 1, 1,
> 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
> 1), am = c(1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1), gear = c(4, 4,
> 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3,
> 3, 3, 4, 5, 5, 5, 5, 5, 4), carb = c(4, 4, 1, 1, 2, 1, 4, 2,
> 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2, 2, 4, 2, 1, 2, 2, 4,
> 6, 8, 2)), layers = list(<environment>), scales = <environment>,
> defaults = list(x = cyl, y = -mpg), title = NULL, fixedaspect = FALSE,
> coordinates = <environment>, formula = ". ~ .", margins = FALSE))
> > print(ggplot(mtcars, aes(x=cyl, y=-mpg)) + scale_y_log10() + geom_point())
> Error in grid.pretty(.$domain()) : infinite axis extents [GEPretty(-inf,inf,5)]
> In addition: Warning messages:
> 1: NaNs produced in: log(x, base)
> 2: no non-missing arguments to min; returning Inf
> 3: no non-missing arguments to max; returning -Inf
> 4: no non-missing arguments to min; returning Inf
> 5: no non-missing arguments to max; returning -Inf
> > traceback()
> 16: .Call(L_pretty, range)
> 15: grid.pretty(.$domain())
> 14: get("breaks", env = .$y(), inherits = TRUE)(.$y(), ...)
> 13: .$y()$breaks()
> 12: range(at)
> 11: as.numeric(x)
> 10: unit(range(at), "native")
> 9: ggaxis_line(at, position)
> 8: ggaxis(.$y()$breaks(), .$y()$labels(), "left", range$y)
> 7: get("guide_axes", env = coordinates, inherits = TRUE)(coordinates,
> ...)
> 6: coordinates$guide_axes()
> 5: guides_basic(plot, scales, cs)
> 4: ggplot_plot(x, ...)
> 3: grid.draw(ggplot_plot(x, ...))
> 2: print.ggplot(ggplot(mtcars, aes(x = cyl, y = -mpg)) + scale_y_log10() +
> geom_point())
> 1: print(ggplot(mtcars, aes(x = cyl, y = -mpg)) + scale_y_log10() +
> geom_point())
>
> ______________________________________________
> 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 Sat 12 May 2007 - 15:32:48 GMT

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 Sun 13 May 2007 - 04:33:04 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.