diff --git a/NEWS.md b/NEWS.md index 0fd950dcf6..7b0fdb280d 100644 --- a/NEWS.md +++ b/NEWS.md @@ -5,7 +5,7 @@ * Fixed regression where `draw_key_rect()` stopped using `fill` colours (@mitchelloharawild, #6609). * Fixed regression where `scale_{x,y}_*()` threw an error when an expression - object is set to `labels` argument (@yutannihilation, #6617). + object is set to `labels` argument (@yutannihilation, #6617, #6638). * Allow `stat` in `geom_hline`, `geom_vline`, and `geom_abline`. (@sierrajohnson, #6559) diff --git a/R/scale-.R b/R/scale-.R index df2046c25e..672328686f 100644 --- a/R/scale-.R +++ b/R/scale-.R @@ -1190,7 +1190,7 @@ ScaleContinuous <- ggproto("ScaleContinuous", Scale, labels <- lapply(labels, `[`, 1) } if (is.expression(labels)) { - labels <- as.list(labels) + labels <- as.list(unclass(labels)) } labels @@ -1438,7 +1438,7 @@ ScaleDiscrete <- ggproto("ScaleDiscrete", Scale, } if (is.expression(labels)) { - labels <- as.list(labels) + labels <- as.list(unclass(labels)) } labels }, @@ -1689,7 +1689,7 @@ ScaleBinned <- ggproto("ScaleBinned", Scale, ) } if (is.expression(labels)) { - labels <- as.list(labels) + labels <- as.list(unclass(labels)) } labels }, diff --git a/tests/testthat/test-scales-breaks-labels.R b/tests/testthat/test-scales-breaks-labels.R index 70a7e0ddcb..893ce2bfc6 100644 --- a/tests/testthat/test-scales-breaks-labels.R +++ b/tests/testthat/test-scales-breaks-labels.R @@ -18,10 +18,14 @@ test_that("labels don't have to match null breaks", { test_that("labels accept expressions", { labels <- parse(text = paste0(1:4, "^degree")) - sc <- scale_y_continuous(breaks = 1:4, labels = labels, limits = c(1, 3)) + sc1 <- scale_y_continuous(breaks = 1:4, labels = labels, limits = c(1, 3)) - expect_equal(sc$get_breaks(), 1:4) - expect_equal(sc$get_labels(), as.list(labels)) + # classed labels should also work (#6638) + classed_labels <- structure(labels, class = "foo") + sc2 <- scale_y_continuous(breaks = 1:4, labels = classed_labels, limits = c(1, 3)) + + expect_equal(sc1$get_labels(), as.list(labels)) + expect_equal(sc2$get_labels(), as.list(labels)) }) test_that("labels don't have extra spaces", {