test_that("can select variables", {
dt <- lazy_dt(data.table(x = 1, y = 1, z = 1), "DT")
expect_equal(
dt %>% select(-z) %>% show_query(),
expr(DT[, .(x, y)])
)
expect_equal(
dt %>% select(a = x, y) %>% show_query(),
expr(DT[, .(a = x, y)])
)
})
test_that("can merge iff j-generating call comes after i", {
dt <- lazy_dt(data.table(x = 1, y = 1, z = 1), "DT")
expect_equal(
dt %>% filter(x > 1) %>% select(y) %>% show_query(),
expr(DT[x > 1, .(y)])
)
expect_equal(
dt %>% select(x = y) %>% filter(x > 1) %>% show_query(),
expr(DT[, .(x = y)][x > 1])
)
})
test_that("renames grouping vars", {
dt <- lazy_dt(data.table(x = 1, y = 1, z = 1))
gt <- group_by(dt, x)
expect_equal(select(gt, y = x)$groups, "y")
})
test_that("empty select returns no columns", {
dt <- data.table(x = 1, y = 1, z = 1)
lz <- lazy_dt(dt, "DT")
expect_equal(
lz %>% select() %>% collect(),
tibble()
)
# unless it's grouped
skip_if(utils::packageVersion("rlang") < "0.5.0")
expect_snapshot(out <- lz %>% group_by(x) %>% select())
expect_equal(
out %>% collect(),
group_by(tibble(x = 1), x)
)
})
test_that("vars set correctly", {
dt <- lazy_dt(data.frame(x = 1:3, y = 1:3))
expect_equal(dt %>% select(a = x, y) %>% .$vars, c("a", "y"))
})
test_that("only add step if necessary", {
dt <- lazy_dt(data.frame(x = 1:3, y = 1:3), "DT")
expect_equal(dt %>% select(everything()), dt)
expect_equal(dt %>% select(x, y), dt)
})
### When data is copied (either implicitly or explicitly)
test_that("copied data: can select variables", {
dt <- lazy_dt(data.table(x = 1, y = 2, z = 3), "DT")
dt$needs_copy <- TRUE
expect_equal(
dt %>% select(-z) %>% show_query(),
expr(copy(DT)[, `:=`(!!"z", NULL)])
)
expect_equal(
dt %>% select(y, x) %>% show_query(),
expr(setcolorder(copy(DT)[, `:=`("z", NULL)], !!c("y", "x")))
)
expect_equal(
dt %>% select(a = x, y) %>% show_query(),
expr(copy(DT)[, .(a = x, y)])
)
})
test_that("copied data: renaming uses regular selection", {
dt <- lazy_dt(data.table(x = 1, y = 2, z = 3), "DT")
dt$needs_copy <- TRUE
step <- dt %>% select(a = x, y)
expect_equal(
show_query(step),
expr(copy(DT)[, .(a = x, y)])
)
expect_named(collect(step), c("a", "y"))
})
test_that("copied data: can merge iff j-generating call comes after i", {
dt <- lazy_dt(data.table(x = 1, y = 2, z = 3), "DT")
dt$needs_copy <- TRUE
expect_equal(
dt %>% filter(x > 1) %>% select(y) %>% show_query(),
expr(copy(DT)[x > 1, .(y)])
)
expect_equal(
dt %>% select(x = y) %>% filter(x > 1) %>% show_query(),
expr(copy(DT)[, .(x = y)][x > 1])
)
})
test_that("copied data: renames grouping vars", {
dt <- lazy_dt(data.table(x = 1, y = 1, z = 1))
gt <- group_by(dt, x)
gt$needs_copy <- TRUE
expect_equal(select(gt, y = x)$groups, "y")
})
test_that("copied data: empty select returns no columns", {
dt <- data.table(x = 1, y = 2, z = 3)
lz <- lazy_dt(dt, "DT")
lz$needs_copy <- TRUE
expect_equal(
lz %>% select() %>% collect(),
tibble()
)
# unless it's grouped
expect_snapshot(out <- lz %>% group_by(x) %>% select())
expect_equal(
out %>% collect(),
group_by(tibble(x = 1), x)
)
})
test_that("copied data: only add step if necessary", {
dt <- lazy_dt(data.frame(x = 1:3, y = 1:3), "DT")
dt$needs_copy <- TRUE
expect_equal(dt %>% select(everything()), dt)
expect_equal(dt %>% select(x, y), dt)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.