Nothing
context("keyed-df-one-tbl")
# Input data --------------------------------------------------------------
keys_mtcars <- mtcars %>% select(vs, am) %>% as_tibble()
assign_keys_mtcars <- . %>% assign_keys(keys_mtcars)
mtcars_df <- mtcars
mtcars_tbl <- as_tibble(mtcars)
mtcars_grouped <- mtcars_tbl %>% group_by(am, gear)
mtcars_rowwise <- rowwise(mtcars)
# Expectations and funcitons ----------------------------------------------
expect_commute <- function(input, .f1, .f2, type = "identical") {
output_1 <- input %>% .f1 %>% .f2
output_2 <- input %>% .f2 %>% .f1
if (type == "identical") {
expect_identical(output_1, output_2)
} else {
expect_equal(output_1, output_2)
}
}
expect_commute_with_keys <- function(input, .f, type = "identical") {
expect_commute(input = input, .f1 = .f, .f2 = assign_keys_mtcars, type = type)
}
assigning_ref_keys <- function(.f, .tbl = mtcars_df, base_keys = keys_mtcars) {
.tbl[[".id"]] <- seq_len(nrow(.tbl))
permutation <- .f(.tbl)[[".id"]]
. %>% assign_keys(base_keys[permutation, ])
}
get_if_permutation <- function(predicate, tbl, f_at, ...) {
pred_columns <- names(tbl)[sapply(tbl, predicate)]
tbl[[".id"]] <- seq_len(nrow(tbl))
f_at(tbl, pred_columns, ...)[[".id"]]
}
# select ------------------------------------------------------------------
test_that("select.keyed_df works", {
select_f <- . %>% select(mpg, am, gear)
expect_commute_with_keys(mtcars_df, select_f)
expect_commute_with_keys(mtcars_tbl, select_f)
expect_commute_with_keys(mtcars_grouped, select_f)
expect_commute_with_keys(mtcars_rowwise, select_f)
})
test_that("select_all works", {
select_all_f <- . %>% select_all(toupper)
expect_commute_with_keys(mtcars_df, select_all_f)
expect_commute_with_keys(mtcars_tbl, select_all_f)
expect_commute_with_keys(mtcars_grouped, select_all_f)
expect_commute_with_keys(mtcars_rowwise, select_all_f)
})
test_that("select_if works", {
is_whole <- function(x) all(floor(x) == x)
select_if_f <- . %>% select_if(is_whole, toupper)
expect_commute_with_keys(mtcars_df, select_if_f)
expect_commute_with_keys(mtcars_tbl, select_if_f)
expect_commute_with_keys(mtcars_grouped, select_if_f)
expect_commute_with_keys(mtcars_rowwise, select_if_f)
})
test_that("select_at works", {
select_at_f <- . %>% select_at(vars(mpg, hp))
expect_commute_with_keys(mtcars_df, select_at_f)
expect_commute_with_keys(mtcars_tbl, select_at_f)
expect_commute_with_keys(mtcars_grouped, select_at_f)
expect_commute_with_keys(mtcars_rowwise, select_at_f)
})
# rename ------------------------------------------------------------------
test_that("rename.keyed_df works", {
rename_f <- . %>% rename(newMPG = mpg)
expect_commute_with_keys(mtcars_df, rename_f)
expect_commute_with_keys(mtcars_tbl, rename_f)
expect_commute_with_keys(mtcars_grouped, rename_f)
expect_commute_with_keys(mtcars_rowwise, rename_f)
})
test_that("rename_all works", {
rename_all_f <- . %>% rename_all(toupper)
expect_commute_with_keys(mtcars_df, rename_all_f)
expect_commute_with_keys(mtcars_tbl, rename_all_f)
# No mtcars_grouped check because scoped renaming works badly on grouped_df
expect_commute_with_keys(mtcars_rowwise, rename_all_f)
})
test_that("rename_if works", {
is_not_whole <- function(x) any(floor(x) != x)
rename_if_f <- . %>% rename_if(is_not_whole, toupper)
expect_commute_with_keys(mtcars_df, rename_if_f)
expect_commute_with_keys(mtcars_tbl, rename_if_f)
# No mtcars_grouped check because scoped renaming works badly on grouped_df
expect_commute_with_keys(mtcars_rowwise, rename_if_f)
})
test_that("rename_at works", {
rename_at_f <- . %>% rename_at(vars(gear, vs), toupper)
expect_commute_with_keys(mtcars_df, rename_at_f)
expect_commute_with_keys(mtcars_tbl, rename_at_f)
# No mtcars_grouped check because scoped renaming works badly on grouped_df
expect_commute_with_keys(mtcars_rowwise, rename_at_f)
})
# mutate ------------------------------------------------------------------
test_that("mutate.keyed_df works", {
mutate_f <- . %>% mutate(mpg = 0, vs = gear * gear)
expect_commute_with_keys(mtcars_df, mutate_f)
expect_commute_with_keys(mtcars_tbl, mutate_f)
expect_commute_with_keys(mtcars_grouped, mutate_f)
expect_commute_with_keys(mtcars_rowwise, mutate_f)
})
test_that("mutate_all works", {
mutate_all_f <- . %>% mutate_all(as.character)
expect_commute_with_keys(mtcars_df, mutate_all_f)
expect_commute_with_keys(mtcars_tbl, mutate_all_f)
expect_commute_with_keys(mtcars_grouped, mutate_all_f)
expect_commute_with_keys(mtcars_rowwise, mutate_all_f)
})
test_that("mutate_if works", {
mutate_if_f <- . %>% mutate_if(is.double, as.integer)
expect_commute_with_keys(mtcars_df, mutate_if_f)
expect_commute_with_keys(mtcars_tbl, mutate_if_f)
expect_commute_with_keys(mtcars_grouped, mutate_if_f)
expect_commute_with_keys(mtcars_rowwise, mutate_if_f)
})
test_that("mutate_at works", {
mutate_at_f <- . %>% mutate_at(vars(mpg, vs), as.integer)
expect_commute_with_keys(mtcars_df, mutate_at_f)
expect_commute_with_keys(mtcars_tbl, mutate_at_f)
expect_commute_with_keys(mtcars_grouped, mutate_at_f)
expect_commute_with_keys(mtcars_rowwise, mutate_at_f)
})
# transmute ---------------------------------------------------------------
test_that("transmute.keyed_df works", {
transmute_f <- . %>% transmute(mpg = 1, vs = gear)
expect_commute_with_keys(mtcars_df, transmute_f)
expect_commute_with_keys(mtcars_tbl, transmute_f)
expect_commute_with_keys(mtcars_grouped, transmute_f)
expect_commute_with_keys(mtcars_rowwise, transmute_f)
})
test_that("transmute_all works", {
transmute_all_f <- . %>% transmute_all(as.character)
expect_commute_with_keys(mtcars_df, transmute_all_f)
expect_commute_with_keys(mtcars_tbl, transmute_all_f)
# No mtcars_grouped check because grouping variables can't be modified
expect_commute_with_keys(mtcars_rowwise, transmute_all_f)
})
test_that("transmute_if works", {
transmute_if_f <- . %>% transmute_if(is.double, as.integer)
expect_commute_with_keys(mtcars_df, transmute_if_f)
expect_commute_with_keys(mtcars_tbl, transmute_if_f)
# No mtcars_grouped check because grouping variables can't be modified
expect_commute_with_keys(mtcars_rowwise, transmute_if_f)
})
test_that("transmute_at works", {
transmute_at_f <- . %>% transmute_at(vars(mpg, hp), as.integer)
expect_commute_with_keys(mtcars_df, transmute_at_f)
expect_commute_with_keys(mtcars_tbl, transmute_at_f)
# No mtcars_grouped check because grouping variables can't be modified
expect_commute_with_keys(mtcars_rowwise, transmute_at_f)
})
# summarise ---------------------------------------------------------------
test_that("summarise.keyed_df works", {
summarise_f <- . %>% summarise(meanGear = mean(gear))
expect_false(mtcars_df %>% key_by(vs) %>% summarise_f() %>% is_keyed_df())
expect_false(mtcars_tbl %>% key_by(vs) %>% summarise_f() %>% is_keyed_df())
expect_false(mtcars_grouped %>% key_by(vs) %>% summarise_f() %>%
is_keyed_df())
expect_false(mtcars_rowwise %>% key_by(vs) %>% summarise_f() %>%
is_keyed_df())
})
test_that("summarise_all works", {
summarise_all_f <- . %>% summarise_all(list(~ n()))
expect_false(mtcars_df %>% key_by(vs) %>% summarise_all_f() %>% is_keyed_df())
expect_false(mtcars_tbl %>% key_by(vs) %>% summarise_all_f() %>%
is_keyed_df())
expect_false(mtcars_grouped %>% key_by(vs) %>% summarise_all_f() %>%
is_keyed_df())
expect_false(mtcars_rowwise %>% key_by(vs) %>% summarise_all_f() %>%
is_keyed_df())
})
test_that("summarise_if works", {
summarise_if_f <- . %>% summarise_if(is.double, mean)
expect_false(mtcars_df %>% key_by(vs) %>% summarise_if_f() %>% is_keyed_df())
expect_false(mtcars_tbl %>% key_by(vs) %>% summarise_if_f() %>% is_keyed_df())
expect_false(mtcars_grouped %>% key_by(vs) %>% summarise_if_f() %>%
is_keyed_df())
expect_false(mtcars_rowwise %>% key_by(vs) %>% summarise_if_f() %>%
is_keyed_df())
})
test_that("summarise_at works", {
summarise_at_f <- . %>% summarise_at(vars(mpg, vs), mean)
expect_false(mtcars_df %>% key_by(vs) %>% summarise_at_f() %>% is_keyed_df())
expect_false(mtcars_tbl %>% key_by(vs) %>% summarise_at_f() %>% is_keyed_df())
expect_false(mtcars_grouped %>% key_by(vs) %>% summarise_at_f() %>%
is_keyed_df())
expect_false(mtcars_rowwise %>% key_by(vs) %>% summarise_at_f() %>%
is_keyed_df())
})
# group_by ----------------------------------------------------------------
test_that("group_by.keyed_df works", {
group_by_f <- . %>% group_by(gear, vs)
expect_commute_with_keys(mtcars_df, group_by_f)
expect_commute_with_keys(mtcars_tbl, group_by_f)
expect_commute_with_keys(mtcars_grouped, group_by_f)
suppressWarnings(expect_commute_with_keys(mtcars_rowwise, group_by_f))
})
test_that("group_by_all works", {
group_by_all_f <- . %>% group_by_all(as.character)
expect_commute_with_keys(mtcars_df, group_by_all_f)
expect_commute_with_keys(mtcars_tbl, group_by_all_f)
expect_commute_with_keys(mtcars_grouped, group_by_all_f)
suppressWarnings(expect_commute_with_keys(mtcars_rowwise, group_by_all_f))
})
test_that("group_by_if works", {
group_by_if_f <- . %>% group_by_if(is.double)
expect_commute_with_keys(mtcars_df, group_by_if_f)
expect_commute_with_keys(mtcars_tbl, group_by_if_f)
expect_commute_with_keys(mtcars_grouped, group_by_if_f)
suppressWarnings(expect_commute_with_keys(mtcars_rowwise, group_by_if_f))
})
test_that("group_by_at works", {
group_by_at_f <- . %>% group_by_at(vars(mpg, vs))
expect_commute_with_keys(mtcars_df, group_by_at_f)
expect_commute_with_keys(mtcars_tbl, group_by_at_f)
expect_commute_with_keys(mtcars_grouped, group_by_at_f)
suppressWarnings(expect_commute_with_keys(mtcars_rowwise, group_by_at_f))
})
# ungroup -----------------------------------------------------------------
test_that("ungroup.keyed_df works", {
expect_commute_with_keys(mtcars_grouped, ungroup)
suppressWarnings(expect_commute_with_keys(mtcars_rowwise, ungroup))
})
# rowwise.keyed_df --------------------------------------------------------
test_that("rowwise.keyed_df works", {
expect_commute_with_keys(mtcars_df, rowwise.keyed_df)
expect_commute_with_keys(mtcars_tbl, rowwise.keyed_df)
})
# distinct ----------------------------------------------------------------
test_that("distinct works", {
expect_false(mtcars_df %>% key_by(vs, am) %>% distinct(hp) %>%
is_keyed_df())
})
# do ----------------------------------------------------------------------
test_that("do works", {
expect_false(
mtcars %>% key_by(vs, am) %>% group_by(gear) %>%
do({summarise(., meanMPG = mean(mpg))}) %>%
is_keyed_df()
)
})
# arrange -----------------------------------------------------------------
test_that("arrange.keyed_df works", {
arrange_f <- . %>% arrange(vs, desc(mpg))
assign_perm_keys <- assigning_ref_keys(arrange_f)
output_1_f <- . %>% arrange_f() %>% assign_perm_keys()
output_2_f <- . %>% assign_keys_mtcars() %>% arrange_f()
expect_identical(output_1_f(mtcars_df), output_2_f(mtcars_df))
expect_identical(output_1_f(mtcars_tbl), output_2_f(mtcars_tbl))
expect_identical(output_1_f(mtcars_grouped), output_2_f(mtcars_grouped))
expect_identical(output_1_f(mtcars_rowwise), output_2_f(mtcars_rowwise))
arrange_f_by_group <- . %>% arrange(vs, desc(mpg), .by_group = TRUE)
assign_perm_keys_by_group <- assigning_ref_keys(
arrange_f_by_group, mtcars_grouped
)
output_1_f_by_group <- . %>% arrange_f_by_group() %>%
assign_perm_keys_by_group()
output_2_f_by_group <- . %>% assign_keys_mtcars() %>% arrange_f_by_group()
expect_identical(
output_1_f_by_group(mtcars_grouped),
output_2_f_by_group(mtcars_grouped)
)
})
test_that("arrange_all works", {
arrange_all_f <- . %>% arrange_all(desc)
assign_perm_keys <- assigning_ref_keys(arrange_all_f)
assign_perm_keys_gr <- assigning_ref_keys(arrange_all_f, mtcars_grouped)
output_1_f <- . %>% arrange_all_f() %>% assign_perm_keys()
output_1_f_gr <- . %>% arrange_all_f() %>% assign_perm_keys_gr()
output_2_f <- . %>% assign_keys_mtcars() %>% arrange_all_f()
expect_identical(output_1_f(mtcars_df), output_2_f(mtcars_df))
expect_identical(output_1_f(mtcars_tbl), output_2_f(mtcars_tbl))
expect_identical(output_1_f_gr(mtcars_grouped), output_2_f(mtcars_grouped))
expect_identical(output_1_f(mtcars_rowwise), output_2_f(mtcars_rowwise))
})
test_that("arrange_if works", {
# This is also a test for 'invisibility' of .id column
arrange_if_f <- . %>% arrange_if(rlang::is_integerish)
permutation <- get_if_permutation(rlang::is_integerish, mtcars_df, arrange_at)
assign_perm_keys <- . %>% assign_keys(keys_mtcars[permutation, ])
permutation_gr <- get_if_permutation(
rlang::is_integerish, mtcars_grouped, arrange_at
)
assign_perm_keys_gr <- . %>% assign_keys(keys_mtcars[permutation_gr, ])
output_1_f <- . %>% arrange_if_f() %>% assign_perm_keys()
output_1_f_gr <- . %>% arrange_if_f() %>% assign_perm_keys_gr()
output_2_f <- . %>% assign_keys_mtcars() %>% arrange_if_f()
expect_identical(output_1_f(mtcars_df), output_2_f(mtcars_df))
expect_identical(output_1_f(mtcars_tbl), output_2_f(mtcars_tbl))
expect_identical(output_1_f_gr(mtcars_grouped), output_2_f(mtcars_grouped))
expect_identical(output_1_f(mtcars_rowwise), output_2_f(mtcars_rowwise))
})
test_that("arrange_at works", {
arrange_at_f <- . %>% arrange_at(vars("disp", "qsec"))
assign_perm_keys <- assigning_ref_keys(arrange_at_f)
assign_perm_keys_gr <- assigning_ref_keys(arrange_at_f, mtcars_grouped)
output_1_f <- . %>% arrange_at_f() %>% assign_perm_keys()
output_1_f_gr <- . %>% arrange_at_f() %>% assign_perm_keys_gr()
output_2_f <- . %>% assign_keys_mtcars() %>% arrange_at_f()
expect_identical(output_1_f(mtcars_df), output_2_f(mtcars_df))
expect_identical(output_1_f(mtcars_tbl), output_2_f(mtcars_tbl))
expect_identical(output_1_f_gr(mtcars_grouped), output_2_f(mtcars_grouped))
expect_identical(output_1_f(mtcars_rowwise), output_2_f(mtcars_rowwise))
})
# filter ------------------------------------------------------------------
test_that("filter.keyed_df works", {
filter_f <- . %>% filter(gear == 4, am == 1)
assign_perm_keys <- assigning_ref_keys(filter_f)
assign_perm_keys_gr <- assigning_ref_keys(filter_f, mtcars_grouped)
output_1_f <- . %>% filter_f() %>% assign_perm_keys()
output_1_f_gr <- . %>% filter_f() %>% assign_perm_keys_gr()
output_2_f <- . %>% assign_keys_mtcars() %>% filter_f()
expect_identical(output_1_f(mtcars_df), output_2_f(mtcars_df))
expect_identical(output_1_f(mtcars_tbl), output_2_f(mtcars_tbl))
# Filtering a grouped data changes the row order (in dplyr >= 0.8.0)
expect_identical(output_1_f_gr(mtcars_grouped), output_2_f(mtcars_grouped))
expect_identical(output_1_f(mtcars_rowwise), output_2_f(mtcars_rowwise))
})
test_that("filter_all works", {
filter_all_f <- . %>% filter_all(all_vars(. > 0))
assign_perm_keys <- assigning_ref_keys(filter_all_f)
assign_perm_keys_gr <- assigning_ref_keys(filter_all_f, mtcars_grouped)
output_1_f <- . %>% filter_all_f() %>% assign_perm_keys()
output_1_f_gr <- . %>% filter_all_f() %>% assign_perm_keys_gr()
output_2_f <- . %>% assign_keys_mtcars() %>% filter_all_f()
expect_identical(output_1_f(mtcars_df), output_2_f(mtcars_df))
expect_identical(output_1_f(mtcars_tbl), output_2_f(mtcars_tbl))
# filter_all removes grouping variables before applying filter so the result
# is different for mtcars_grouped
expect_identical(output_1_f_gr(mtcars_grouped), output_2_f(mtcars_grouped))
expect_identical(output_1_f(mtcars_rowwise), output_2_f(mtcars_rowwise))
})
test_that("filter_if works", {
filter_if_f <- . %>% filter_if(rlang::is_integerish, all_vars(. < 100))
permutation <- get_if_permutation(
rlang::is_integerish, mtcars_df, filter_at, all_vars(. < 100)
)
assign_perm_keys <- . %>% assign_keys(keys_mtcars[permutation, ])
permutation_gr <- get_if_permutation(
rlang::is_integerish, mtcars_grouped, filter_at, all_vars(. < 100)
)
assign_perm_keys_gr <- . %>% assign_keys(keys_mtcars[permutation_gr, ])
output_1_f <- . %>% filter_if_f() %>% assign_perm_keys()
output_1_f_gr <- . %>% filter_if_f() %>% assign_perm_keys_gr()
output_2_f <- . %>% assign_keys_mtcars() %>% filter_if_f()
expect_identical(output_1_f(mtcars_df), output_2_f(mtcars_df))
expect_identical(output_1_f(mtcars_tbl), output_2_f(mtcars_tbl))
# Filtering a grouped data changes the row order (in dplyr >= 0.8.0)
expect_identical(output_1_f_gr(mtcars_grouped), output_2_f(mtcars_grouped))
expect_identical(output_1_f(mtcars_rowwise), output_2_f(mtcars_rowwise))
})
test_that("filter_at works", {
filter_at_f <- . %>% filter_at(vars("mpg", "hp"), all_vars(. > 15))
assign_perm_keys <- assigning_ref_keys(filter_at_f)
assign_perm_keys_gr <- assigning_ref_keys(filter_at_f, mtcars_grouped)
output_1_f <- . %>% filter_at_f() %>% assign_perm_keys()
output_1_f_gr <- . %>% filter_at_f() %>% assign_perm_keys_gr()
output_2_f <- . %>% assign_keys_mtcars() %>% filter_at_f()
expect_identical(output_1_f(mtcars_df), output_2_f(mtcars_df))
expect_identical(output_1_f(mtcars_tbl), output_2_f(mtcars_tbl))
# Filtering a grouped data changes the row order (in dplyr >= 0.8.0)
expect_identical(output_1_f_gr(mtcars_grouped), output_2_f(mtcars_grouped))
expect_identical(output_1_f(mtcars_rowwise), output_2_f(mtcars_rowwise))
})
# slice -------------------------------------------------------------------
test_that("slice.keyed_df works", {
slice_f <- . %>% slice(c(4, 5, 31, 3, 3, 14, 18, 30, 31, 44))
assign_perm_keys <- assigning_ref_keys(slice_f)
assign_perm_keys_gr <- assigning_ref_keys(slice_f, mtcars_grouped)
# Need extra version for `rowwise()` because starting from 'dplyr 1.0.0'
# `slice()` on `rowwise_df` behaves like on `grouped_df` with every row being
# a group. So before 1.0.0, `tibble(x=1:3) %>% rowwise() %>% slice(2)` would
# return second row of the whole tibble, in 1.0.0 it would return zero-row
# tibble, the same as `tibble(x=1:3) %>% group_by(x) %>% slice(2)` in this
# setup.
assign_perm_key_rowwise <- assigning_ref_keys(slice_f, mtcars_rowwise)
output_1_f <- . %>% slice_f() %>% assign_perm_keys()
output_1_f_gr <- . %>% slice_f() %>% assign_perm_keys_gr()
output_1_f_rowwise <- . %>% slice_f() %>% assign_perm_key_rowwise()
output_2_f <- . %>% assign_keys_mtcars() %>% slice_f()
expect_identical(output_1_f(mtcars_df), output_2_f(mtcars_df))
expect_identical(output_1_f(mtcars_tbl), output_2_f(mtcars_tbl))
# Slicing grouped_df is done differently
expect_identical(output_1_f_gr(mtcars_grouped), output_2_f(mtcars_grouped))
# Slicing rowwise_df is done as if every row is a single-element group
expect_identical(
output_1_f_rowwise(mtcars_rowwise), output_1_f_rowwise(mtcars_rowwise)
)
})
# next_method_keys --------------------------------------------------------
test_that("next_method_keys ensures tibble in attr(.tbl, 'keys')", {
input <- mtcars_df
class(input) <- c("keyed_df", "data.frame")
output <- next_method_keys(input, select, mpg) %>% attr("keys")
output_ref <- tibble(logical(32))[-1]
expect_identical(output, output_ref)
})
# next_method_keys_track --------------------------------------------------
test_that("next_method_keys_track ensures tibble in attr(.tbl, 'keys')", {
input <- mtcars_df
class(input) <- c("keyed_df", "data.frame")
output_1 <- next_method_keys_track(input, arrange, mpg) %>% attr("keys")
output_ref_1 <- tibble(logical(32))[-1]
expect_identical(output_1, output_ref_1)
output_2 <- next_method_keys_track(input, filter, cyl == 4) %>% attr("keys")
output_ref_2 <- tibble(logical(11))[-1]
expect_identical(output_2, output_ref_2)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.