@@ -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