hadley wickham
2007-May-12 14:36 UTC
[Rd] Implicit vs explicit printing and the call stack
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())
Gabor Grothendieck
2007-May-12 15:25 UTC
[Rd] Implicit vs explicit printing and the call stack
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 >
Prof Brian Ripley
2007-May-13 09:18 UTC
[Rd] Implicit vs explicit printing and the call stack
First, it was not clear that you are talking about the output of traceback(), which is _a representation of_ the call stack and depends on the details of deparsing. Second, the difference is I believe not implicit vs explicit printing, but of printing an evaluated object vs printing a call. What your subject line would correspond to is x <- ggplot(mtcars, aes(x = cyl, y = -mpg)) + scale_y_log10() + geom_point() x vs print(x) I can't demonstrate (what is aes?), but I expect that would show minimal differences. The issue seems to be whether arguments have been evaluated, and if so whether they were promises. Promises can be deparsed back to the symbolic representation rather than to their value. When you call print explicitly _on the ggplot call_, you have promises to arguments (to support lazy evaluation). As far as I know (this is a detail of your code), the object ggplot returns has evaluated 'mtcars' and contains the value and not the promise, hence the difference in the deparsing of the call stack. You chose to call traceback() without 'max.lines', and the answer would seem to be 1) don't use a buggy print method, 2) if you have to (to fix it), use 'max.lines' or do this in two steps. If you want your end users to see a nicer representation, reconsider what you actually return in your object. On Sat, 12 May 2007, hadley wickham 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 >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595