diff --git a/R/rsplit.R b/R/rsplit.R index adf59e480..b3ad2b13a 100644 --- a/R/rsplit.R +++ b/R/rsplit.R @@ -64,7 +64,7 @@ rsplit.units <- rsplit.zoo rsplit.data.frame <- function(x, by, drop = TRUE, flatten = FALSE, # check = TRUE, cols = NULL, keep.by = FALSE, simplify = TRUE, - use.names = TRUE, ...) { + use.names = TRUE, nest = FALSE, ...) { if(is.call(by)) { nam <- attr(x, "names") @@ -99,6 +99,8 @@ rsplit.data.frame <- function(x, by, drop = TRUE, flatten = FALSE, # check = TRU } } + if(nest) return(ftransform(unique(data.frame(by)), data = gsplit_DF(x, by))) + if(is.atomic(by) || flatten || is_GRP(by)) return(gsplit_DF(x, by, ...)) attributes(by) <- NULL diff --git a/tests/testthat/test-splitting.R b/tests/testthat/test-splitting.R index 14d906327..7ccf0bc9d 100644 --- a/tests/testthat/test-splitting.R +++ b/tests/testthat/test-splitting.R @@ -47,6 +47,7 @@ test_that("rsplit data frame method works as intended", { expect_equal(rsplit(mtcars, mtcars$cyl), split(mtcars, mtcars$cyl)) expect_equal(rsplit(mtcars, mpg ~ cyl), split(mtcars$mpg, mtcars$cyl)) + expect_equal(rsplit(mtcars, ~ cyl, nest = TRUE)$data, rsplit(mtcars, ~ cyl)) expect_equal(rsplit(mtcars, mpg ~ cyl, simplify = FALSE), split(mtcars["mpg"], mtcars$cyl)) expect_true(all_obj_equal(rsplit(mtcars, mtcars[.c(cyl, vs, am)], flatten = TRUE),