Skip to content

Commit 6f8e22f

Browse files
committed
sprinkle vctrs over ScaleDiscrete$map()
1 parent 842e6be commit 6f8e22f

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

R/scale-.R

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -954,10 +954,10 @@ ScaleDiscrete <- ggproto("ScaleDiscrete", Scale,
954954
transform = identity,
955955

956956
map = function(self, x, limits = self$get_limits()) {
957-
limits <- limits[!is.na(limits)]
958-
n <- length(limits)
957+
limits <- vec_slice(limits, !is.na(limits))
958+
n <- vec_size(limits)
959959
if (n < 1) {
960-
return(rep(self$na.value, length(x)))
960+
return(vec_rep(self$na.value, vec_size(x)))
961961
}
962962
if (!is.null(self$n.breaks.cache) && self$n.breaks.cache == n) {
963963
pal <- self$palette.cache
@@ -973,21 +973,30 @@ ScaleDiscrete <- ggproto("ScaleDiscrete", Scale,
973973
self$n.breaks.cache <- n
974974
}
975975

976-
na_value <- if (self$na.translate) self$na.value else NA
977-
pal_names <- names(pal)
976+
na_value <- NA
977+
if (self$na.translate) {
978+
na_value <- self$na.value
979+
if (obj_is_list(pal) && !obj_is_list(na_value)) {
980+
# We prevent a casting error that occurs when mapping grid patterns
981+
na_value <- list(na_value)
982+
}
983+
}
984+
985+
pal_names <- vec_names(pal)
978986

979987
if (!is_null(pal_names)) {
980988
# if pal is named, limit the pal by the names first,
981989
# then limit the values by the pal
982-
pal[is.na(match(pal_names, limits))] <- na_value
983-
pal <- unname(pal)
990+
vec_slice(pal, is.na(match(pal_names, limits))) <- na_value
991+
pal <- vec_set_names(pal, NULL)
984992
limits <- pal_names
985993
}
986-
pal <- c(pal, na_value)
987-
pal_match <- pal[match(as.character(x), limits, nomatch = length(pal))]
994+
pal <- vec_c(pal, na_value)
995+
pal_match <-
996+
vec_slice(pal, match(as.character(x), limits, nomatch = vec_size(pal)))
988997

989998
if (!is.na(na_value)) {
990-
pal_match[is.na(x)] <- na_value
999+
vec_slice(pal_match, is.na(x)) <- na_value
9911000
}
9921001
pal_match
9931002
},

0 commit comments

Comments
 (0)