diff --git a/R/scale-.R b/R/scale-.R index 7cae5da74b..66a0c91de4 100644 --- a/R/scale-.R +++ b/R/scale-.R @@ -714,7 +714,11 @@ ScaleContinuous <- ggproto("ScaleContinuous", Scale, pal <- self$palette(uniq) scaled <- pal[match(x, uniq)] - ifelse(!is.na(scaled), scaled, self$na.value) + if (!anyNA(scaled)) { + return(scaled) + } + + vec_assign(scaled, is.na(scaled), self$na.value) }, rescale = function(self, x, limits = self$get_limits(), range = limits) { diff --git a/R/scale-continuous.R b/R/scale-continuous.R index 8a681c2f20..9b0c8ec82c 100644 --- a/R/scale-continuous.R +++ b/R/scale-continuous.R @@ -142,7 +142,10 @@ ScaleContinuousPosition <- ggproto("ScaleContinuousPosition", ScaleContinuous, # can tell the difference between continuous and discrete data. map = function(self, x, limits = self$get_limits()) { scaled <- as.numeric(self$oob(x, limits)) - ifelse(!is.na(scaled), scaled, self$na.value) + if (!anyNA(scaled)) { + return(scaled) + } + vec_assign(scaled, is.na(scaled), self$na.value) }, break_info = function(self, range = NULL) { breaks <- ggproto_parent(ScaleContinuous, self)$break_info(range)