Skip to content

Commit db62ebe

Browse files
committed
Improve missing facetting variable error message
Fixes #2517
1 parent 6a261a2 commit db62ebe

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

R/facet-.r

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -530,11 +530,20 @@ combine_vars <- function(data, env = emptyenv(), vars = NULL, drop = TRUE) {
530530
# For each layer, compute the facet values
531531
values <- compact(plyr::llply(data, eval_facets, facets = vars, env = env))
532532

533-
# Form the base data frame which contains all combinations of faceting
533+
# Form the base data.frame which contains all combinations of faceting
534534
# variables that appear in the data
535-
has_all <- unlist(plyr::llply(values, length)) == length(vars)
535+
has_all <- unlist(lapply(values, length)) == length(vars)
536536
if (!any(has_all)) {
537-
stop("At least one layer must contain all variables used for faceting")
537+
missing <- lapply(values, function(x) setdiff(names(vars), names(x)))
538+
missing_txt <- vapply(missing, var_list, character(1))
539+
name <- c("Plot", paste0("Layer ", seq_len(length(data) - 1)))
540+
541+
stop(
542+
"At least one layer must contain all faceting variables: ",
543+
var_list(names(vars)), ".\n",
544+
paste0("* ", name, " is missing ", missing_txt, collapse = "\n"),
545+
call. = FALSE
546+
)
538547
}
539548

540549
base <- unique(plyr::ldply(values[has_all]))

R/utilities.r

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,15 @@ warning_wrap <- function(...) {
360360
warning(paste0(wrapped, collapse = "\n"), call. = FALSE)
361361
}
362362

363+
var_list <- function(x) {
364+
x <- encodeString(x, quote = "`")
365+
if (length(x) > 5) {
366+
x <- c(x[1:5], paste0("and ", length(x) - 5, " more"))
367+
}
368+
369+
paste0(x, collapse = ", ")
370+
}
371+
363372
dispatch_args <- function(f, ...) {
364373
args <- list(...)
365374
formals <- formals(f)

0 commit comments

Comments
 (0)