dplyr::group_by 删除自定义类

问题描述 投票:0回答:1

我正在尝试实现

tibble
的子类,它带有自定义打印方法。我认为
dplyr::group_by
默默地删除了我的自定义类,结果是我的
S3
打印方法不再调度。

当我认为这种行为是一个功能而不是一个错误时,我想知道处理这个问题的规范方法应该是什么?超载

dplyr::group_by
?或者我在这里忽略了一些非常基本的东西?

我的期望是分组的

my_tbl
也显示我的自定义标题:

library(tibble)

## Define a custom subclass of tbl
my_tbl <- function(x) {
  new_tibble(x, class = "my_tbl")
}

## Define an own tbl_sum function
tbl_sum.my_tbl <- function(x) {
  c("My Fancy Header" = "Whooaaaa!")
}

## Header is printed as it should
(mt <- my_tbl(mtcars %>% dplyr::slice(1L)))
# # My Fancy Header: Whooaaaa!
#     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1    21     6   160   110   3.9  2.62  16.5     0     1     4     4


## However, not when we add a grouping structure
mt %>% dplyr::group_by(am)
# # A tibble: 1 × 11
# # Groups:   am [1]
#     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1    21     6   160   110   3.9  2.62  16.5     0     1     4     4


## Reason: group_by silently drops my custom class
class(mt) ##...vs...
# [1] "my_tbl"     "tbl_df"     "tbl"        "data.frame"

class(mt %>% dplyr::group_by(am)) 
# [1] "grouped_df" "tbl_df"     "tbl"        "data.frame"
r dplyr tibble
1个回答
0
投票

您需要自己为您的类实现一个

group_by()
方法。来自 dplyr 扩展小插图

请注意,group_by() 和 ungroup() 不使用任何这些泛型,您需要直接为它们提供方法,或者依赖 .by 进行每个操作分组。

© www.soinside.com 2019 - 2024. All rights reserved.