Skip to content

Commit

Permalink
group_split
Browse files Browse the repository at this point in the history
  • Loading branch information
krlmlr committed Mar 7, 2024
1 parent 627aafd commit 6db55d8
Show file tree
Hide file tree
Showing 7 changed files with 66 additions and 1 deletion.
1 change: 1 addition & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ S3method(group_map,duckplyr_df)
S3method(group_modify,duckplyr_df)
S3method(group_nest,duckplyr_df)
S3method(group_size,duckplyr_df)
S3method(group_split,duckplyr_df)
S3method(group_vars,duckplyr_df)
S3method(groups,duckplyr_df)
S3method(head,duckplyr_df)
Expand Down
37 changes: 37 additions & 0 deletions R/group_split.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Generated by 02-duckplyr_df-methods.R
#' @export
group_split.duckplyr_df <- function(.tbl, ..., .keep = TRUE, keep = deprecated()) {
# Our implementation
rel_try(
# Always fall back to dplyr
"No relational implementation for group_split()" = TRUE,
{
return(out)
}
)

# dplyr forward
group_split <- dplyr$group_split.data.frame
out <- group_split(.tbl, ..., .keep = .keep, keep = keep)
return(out)

# dplyr implementation
if (!missing(keep)) {
lifecycle::deprecate_warn("1.0.0", "group_split(keep = )", "group_split(.keep = )", always = TRUE)
.keep <- keep
}
data <- group_by(.tbl, ...)
group_split_impl(data, .keep = .keep)
}

duckplyr_group_split <- function(.tbl, ...) {
try_fetch(
.tbl <- as_duckplyr_df(.tbl),
error = function(e) {
testthat::skip(conditionMessage(e))
}
)
out <- group_split(.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 @@ -22,6 +22,7 @@ methods_overwrite <- function() {
vctrs::s3_register("dplyr::group_modify", "data.frame", group_modify.duckplyr_df)
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_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 @@ -22,6 +22,7 @@ methods_restore <- function() {
vctrs::s3_register("dplyr::group_modify", "data.frame", dplyr$group_modify.data.frame)
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_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
8 changes: 8 additions & 0 deletions dplyr-methods/group_split.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
group_split.data.frame <- function(.tbl, ..., .keep = TRUE, keep = deprecated()) {
if (!missing(keep)) {
lifecycle::deprecate_warn("1.0.0", "group_split(keep = )", "group_split(.keep = )", always = TRUE)
.keep <- keep
}
data <- group_by(.tbl, ...)
group_split_impl(data, .keep = .keep)
}
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 @@ -866,6 +866,22 @@ test_that("as_duckplyr_df() and group_size()", {
expect_equal(pre, post)
})

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

skip("WAT")

# 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_split()
post <- test_df %>% group_split() %>% 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_split", "group_trim", "n_groups",
"group_trim", "n_groups",
"same_src", # data frames can be copied into duck-frames with zero cost
NULL
))) %>%
Expand All @@ -32,6 +32,7 @@ df_methods <-
"group_modify",
"group_nest",
"group_size",
"group_split",
"groups",
"rowwise",
NULL
Expand Down

0 comments on commit 6db55d8

Please sign in to comment.