@@ -347,12 +347,13 @@ Layer <- ggproto("Layer", NULL,
347347  },
348348
349349  compute_statistic  =  function (self , data , layout ) {
350-     if  (empty(data ))
351-       return (data_frame0())
350+     if  (empty(data )) return (data_frame0())
352351
352+     ptype  <-  vec_ptype(data )
353353    self $ computed_stat_params  <-  self $ stat $ setup_params(data , self $ stat_params )
354354    data  <-  self $ stat $ setup_data(data , self $ computed_stat_params )
355-     self $ stat $ compute_layer(data , self $ computed_stat_params , layout )
355+     data  <-  self $ stat $ compute_layer(data , self $ computed_stat_params , layout )
356+     merge_attrs(data , ptype )
356357  },
357358
358359  map_statistic  =  function (self , data , plot ) {
@@ -396,30 +397,32 @@ Layer <- ggproto("Layer", NULL,
396397      stat_data  <-  plot $ scales $ transform_df(stat_data )
397398    }
398399    stat_data  <-  cleanup_mismatched_data(stat_data , nrow(data ), " after_stat" 
399- 
400-     data_frame0( !!! defaults( stat_data ,  data )) 
400+      data [names( stat_data )]  <-   stat_data 
401+     data 
401402  },
402403
403404  compute_geom_1  =  function (self , data ) {
404405    if  (empty(data )) return (data_frame0())
406+     ptype  <-  vec_ptype(data )
405407
406408    check_required_aesthetics(
407409      self $ geom $ required_aes ,
408410      c(names(data ), names(self $ aes_params )),
409411      snake_class(self $ geom )
410412    )
411413    self $ computed_geom_params  <-  self $ geom $ setup_params(data , c(self $ geom_params , self $ aes_params ))
412-     self $ geom $ setup_data(data , self $ computed_geom_params )
414+     data  <-  self $ geom $ setup_data(data , self $ computed_geom_params )
415+     merge_attrs(data , ptype )
413416  },
414417
415418  compute_position  =  function (self , data , layout ) {
416419    if  (empty(data )) return (data_frame0())
417- 
420+      ptype   <-  vec_ptype( data ) 
418421    data  <-  self $ position $ use_defaults(data , self $ aes_params )
419422    params  <-  self $ position $ setup_params(data )
420423    data  <-  self $ position $ setup_data(data , params )
421- 
422-     self $ position $ compute_layer (data , params ,  layout )
424+      data   <-   self $ position $ compute_layer( data ,  params ,  layout ) 
425+     merge_attrs (data , ptype )
423426  },
424427
425428  compute_geom_2  =  function (self , data , params  =  self $ aes_params , theme  =  NULL , ... ) {
@@ -516,6 +519,10 @@ set_draw_key <- function(geom, draw_key = NULL) {
516519}
517520
518521cleanup_mismatched_data  <-  function (data , n , fun ) {
522+   if  (vec_duplicate_any(names(data ))) {
523+     data  <-  data [unique0(names(data ))]
524+   }
525+ 
519526  failed  <-  ! lengths(data ) %in%  c(0 , 1 , n )
520527  if  (! any(failed )) {
521528    return (data )
0 commit comments