From c59b158f808fd52fa7b7e0ae06cd52878c6a5a87 Mon Sep 17 00:00:00 2001 From: Yunuuuu Date: Wed, 9 Apr 2025 13:58:40 +0800 Subject: [PATCH 1/2] fix wrong parameters due to partial matching --- NAMESPACE | 2 ++ R/layer.R | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/NAMESPACE b/NAMESPACE index 088da2ba6c..d218d82b21 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,5 +1,6 @@ # Generated by roxygen2: do not edit by hand +S3method("$",ggplot2_parameters) S3method("$",ggproto) S3method("$",ggproto_parent) S3method("$",theme) @@ -9,6 +10,7 @@ S3method("[",mapped_discrete) S3method("[",uneval) S3method("[<-",mapped_discrete) S3method("[<-",uneval) +S3method("[[",ggplot2_parameters) S3method("[[",ggproto) S3method("[[<-",uneval) S3method(.DollarNames,ggproto) diff --git a/R/layer.R b/R/layer.R index cb81e84b58..9256ae8255 100644 --- a/R/layer.R +++ b/R/layer.R @@ -132,7 +132,9 @@ layer <- function(geom = NULL, stat = NULL, params <- rename_aes(params) aes_params <- params[intersect(names(params), union(geom$aesthetics(), position$aesthetics()))] geom_params <- params[intersect(names(params), geom$parameters(TRUE))] + geom_params <- new_params(geom_params) stat_params <- params[intersect(names(params), stat$parameters(TRUE))] + stat_params <- new_params(stat_params) ignore <- c("key_glyph", "name", "layout") all <- c(geom$parameters(TRUE), stat$parameters(TRUE), geom$aesthetics(), position$aesthetics(), ignore) @@ -543,3 +545,11 @@ cleanup_mismatched_data <- function(data, n, fun) { data[failed] <- NULL data } + +new_params <- function(params) structure(params, class = "ggplot2_parameters") + +#' @export +`$.ggplot2_parameters` <- function(x, i) .subset2(x, i) + +#' @export +`[[.ggplot2_parameters` <- function(x, i) .subset2(x, i) From c0742732a7dc0f6e323219f872ab8fab20aef5f6 Mon Sep 17 00:00:00 2001 From: Yunuuuu Date: Wed, 9 Apr 2025 15:40:21 +0800 Subject: [PATCH 2/2] fix other partial matching --- R/facet-.R | 4 ++-- R/labels.R | 2 +- tests/testthat/test-legend-draw.R | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/R/facet-.R b/R/facet-.R index 16647b5f07..1ec405ed2d 100644 --- a/R/facet-.R +++ b/R/facet-.R @@ -879,7 +879,7 @@ map_facet_data <- function(data, layout, params) { return(vec_cbind(data %|W|% NULL, PANEL = integer(0))) } - vars <- params$facet %||% c(params$rows, params$cols) + vars <- params$facets %||% c(params$rows, params$cols) if (length(vars) == 0) { data$PANEL <- layout$PANEL @@ -898,7 +898,7 @@ map_facet_data <- function(data, layout, params) { # Compute faceting values facet_vals <- eval_facets(vars, data, params$.possible_columns) - include_margins <- !isFALSE(params$margin %||% FALSE) && + include_margins <- !isFALSE(params$margins %||% FALSE) && nrow(facet_vals) == nrow(data) && grid_layout if (include_margins) { # Margins are computed on evaluated faceting values (#1864). diff --git a/R/labels.R b/R/labels.R index 27c1e96de6..95a54720eb 100644 --- a/R/labels.R +++ b/R/labels.R @@ -351,7 +351,7 @@ get_alt_text.gtable <- function(p, ...) { #' generate_alt_text <- function(p) { # Combine titles - if (!is.null(p$label$title %||% p$labels$subtitle)) { + if (!is.null(p$labels$title %||% p$labels$subtitle)) { title <- sub("\\.?$", "", c(p$labels$title, p$labels$subtitle)) if (length(title) == 2) { title <- paste0(title[1], ": ", title[2]) diff --git a/tests/testthat/test-legend-draw.R b/tests/testthat/test-legend-draw.R index 5f4cc01032..b0c0505b2a 100644 --- a/tests/testthat/test-legend-draw.R +++ b/tests/testthat/test-legend-draw.R @@ -36,7 +36,7 @@ test_that("all keys can be drawn without 'params'", { expect_in(nse, names(keys)) # Add title to every key - template <- gtable(width = unit(size, "mm"), heights = unit(c(1, size), c("lines", "mm"))) + template <- gtable(widths = unit(size, "mm"), heights = unit(c(1, size), c("lines", "mm"))) keys <- Map( function(key, name) { text <- textGrob(name, gp = gpar(fontsize = 8))