@@ -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 , ... ) {
@@ -484,6 +487,10 @@ set_draw_key <- function(geom, draw_key = NULL) {
484487}
485488
486489cleanup_mismatched_data <- function (data , n , fun ) {
490+ if (vec_duplicate_any(names(data ))) {
491+ data <- data [unique0(names(data ))]
492+ }
493+
487494 failed <- ! lengths(data ) %in% c(0 , 1 , n )
488495 if (! any(failed )) {
489496 return (data )
0 commit comments