Skip to content

Commit

Permalink
group_trim
Browse files Browse the repository at this point in the history
  • Loading branch information
krlmlr committed Mar 7, 2024
1 parent 6db55d8 commit 64dd8b7
Show file tree
Hide file tree
Showing 8 changed files with 58 additions and 1 deletion.
2 changes: 2 additions & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ S3method(group_modify,duckplyr_df)
S3method(group_nest,duckplyr_df)
S3method(group_size,duckplyr_df)
S3method(group_split,duckplyr_df)
S3method(group_trim,duckplyr_df)
S3method(group_vars,duckplyr_df)
S3method(groups,duckplyr_df)
S3method(head,duckplyr_df)
Expand Down Expand Up @@ -263,6 +264,7 @@ importFrom(dplyr,group_nest)
importFrom(dplyr,group_rows)
importFrom(dplyr,group_size)
importFrom(dplyr,group_split)
importFrom(dplyr,group_trim)
importFrom(dplyr,group_vars)
importFrom(dplyr,group_walk)
importFrom(dplyr,grouped_df)
Expand Down
1 change: 1 addition & 0 deletions R/duckplyr-package.R
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#' @importFrom dplyr group_indices
#' @importFrom dplyr group_nest
#' @importFrom dplyr group_split
#' @importFrom dplyr group_trim
#' @importFrom dplyr grouped_df
#' @importFrom dplyr if_else
#' @importFrom glue glue
Expand Down
32 changes: 32 additions & 0 deletions R/group_trim.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Generated by 02-duckplyr_df-methods.R
#' @export
group_trim.duckplyr_df <- function(.tbl, .drop = group_by_drop_default(.tbl)) {
# Our implementation
rel_try(
# Always fall back to dplyr
"No relational implementation for group_trim()" = TRUE,
{
return(out)
}
)

# dplyr forward
group_trim <- dplyr$group_trim.data.frame
out <- group_trim(.tbl, .drop)
return(out)

# dplyr implementation
.tbl
}

duckplyr_group_trim <- function(.tbl, ...) {
try_fetch(
.tbl <- as_duckplyr_df(.tbl),
error = function(e) {
testthat::skip(conditionMessage(e))
}
)
out <- group_trim(.tbl, ...)
class(out) <- setdiff(class(out), "duckplyr_df")
out
}
1 change: 1 addition & 0 deletions R/overwrite.R
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ methods_overwrite <- function() {
vctrs::s3_register("dplyr::group_nest", "data.frame", group_nest.duckplyr_df)
vctrs::s3_register("dplyr::group_size", "data.frame", group_size.duckplyr_df)
vctrs::s3_register("dplyr::group_split", "data.frame", group_split.duckplyr_df)
vctrs::s3_register("dplyr::group_trim", "data.frame", group_trim.duckplyr_df)
vctrs::s3_register("dplyr::group_vars", "data.frame", group_vars.duckplyr_df)
vctrs::s3_register("dplyr::groups", "data.frame", groups.duckplyr_df)
vctrs::s3_register("dplyr::inner_join", "data.frame", inner_join.duckplyr_df)
Expand Down
1 change: 1 addition & 0 deletions R/restore.R
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ methods_restore <- function() {
vctrs::s3_register("dplyr::group_nest", "data.frame", dplyr$group_nest.data.frame)
vctrs::s3_register("dplyr::group_size", "data.frame", dplyr$group_size.data.frame)
vctrs::s3_register("dplyr::group_split", "data.frame", dplyr$group_split.data.frame)
vctrs::s3_register("dplyr::group_trim", "data.frame", dplyr$group_trim.data.frame)
vctrs::s3_register("dplyr::group_vars", "data.frame", dplyr$group_vars.data.frame)
vctrs::s3_register("dplyr::groups", "data.frame", dplyr$groups.data.frame)
vctrs::s3_register("dplyr::inner_join", "data.frame", dplyr$inner_join.data.frame)
Expand Down
3 changes: 3 additions & 0 deletions dplyr-methods/group_trim.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
group_trim.data.frame <- function(.tbl, .drop = group_by_drop_default(.tbl)) {
.tbl
}
16 changes: 16 additions & 0 deletions tests/testthat/test-as_duckplyr_df.R
Original file line number Diff line number Diff line change
Expand Up @@ -882,6 +882,22 @@ test_that("as_duckplyr_df() and group_split()", {
expect_equal(pre, post)
})

test_that("as_duckplyr_df() and group_trim()", {
withr::local_envvar(DUCKPLYR_FORCE = "FALSE")

skip("Grouped")

# Data
test_df <- data.frame(a = 1:6 + 0, b = 2, g = rep(1:3, 1:3))

# Run
pre <- test_df %>% as_duckplyr_df() %>% group_trim()
post <- test_df %>% group_trim() %>% as_duckplyr_df()

# Compare
expect_equal(pre, post)
})

test_that("as_duckplyr_df() and group_vars()", {
withr::local_envvar(DUCKPLYR_FALLBACK_FORCE = "TRUE")

Expand Down
3 changes: 2 additions & 1 deletion tools/00-funs.R
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ df_methods <-
filter(!grepl("_$|^as[.]tbl$", name)) %>%
# special dplyr methods, won't implement
filter(!(name %in% c(
"group_trim", "n_groups",
"n_groups",
"same_src", # data frames can be copied into duck-frames with zero cost
NULL
))) %>%
Expand All @@ -33,6 +33,7 @@ df_methods <-
"group_nest",
"group_size",
"group_split",
"group_trim",
"groups",
"rowwise",
NULL
Expand Down

0 comments on commit 64dd8b7

Please sign in to comment.