test_that("arrange orders variables", {
dt <- lazy_dt(data.table(x = 1, y = 1, z = 1), "DT")
expect_equal(
dt %>% arrange(x) %>% show_query(),
expr(DT[order(x)])
)
})
test_that("arrange doesn't use, but still preserves, grouping", {
dt <- group_by(lazy_dt(data.table(x = 1, y = 2), "DT"), x)
step <- arrange(dt, y)
expect_equal(step$groups, "x")
expect_equal(dt_call(step), expr(DT[order(y)]))
step2 <- arrange(dt, y, .by_group = TRUE)
expect_equal(dt_call(step2), expr(DT[order(x, y)]))
})
test_that("empty arrange returns input unchanged", {
dt <- lazy_dt(data.table(x = 1, y = 1, z = 1), "DT")
expect_true(identical(arrange(dt), dt))
})
test_that("can use with across", {
dt <- lazy_dt(data.table(x = 1, y = 1, z = 1), "DT")
expect_equal(
dt %>% arrange(across(x:y)) %>% show_query(),
expr(DT[order(x, y)])
)
})
test_that("vars set correctly", {
dt <- lazy_dt(data.frame(x = 1:3, y = 1:3))
expect_equal(dt %>% arrange(x) %>% .$vars, c("x", "y"))
})
test_that("desc works with internal quosure", {
dt <- lazy_dt(data.table(x = c(4,3,9,7), y = 1:4))
desc_df <- dt %>% arrange(desc(!!quo(x))) %>% collect()
expect_equal(desc_df$x, c(9,7,4,3))
})
test_that("desc works .data pronoun", {
dt <- lazy_dt(data.table(x = c(4,3,9,7), y = 1:4))
desc_df <- dt %>% arrange(desc(.data$x)) %>% collect()
expect_equal(desc_df$x, c(9,7,4,3))
})
test_that("only add step if necessary", {
dt <- lazy_dt(data.frame(x = 1:3, y = 1:3))
expect_equal(dt %>% arrange(), dt)
expect_equal(dt %>% arrange(!!!list()), dt)
})
test_that("uses setorder when there is already a copy", {
dt <- lazy_dt(data.frame(x = 1:3, y = 1:3), "DT")
# Works with implicit copy
step_implicit <- dt %>%
filter(x < 4) %>%
arrange(x, y)
expect_equal(
show_query(step_implicit),
expr(setorder(DT[x < 4], x, y, na.last = TRUE))
)
# Works with explicit copy
step_explicit <- dt %>%
mutate(x = x * 2) %>%
arrange(x, -y)
expect_equal(
show_query(step_explicit),
expr(setorder(copy(DT)[, `:=`(x = x * 2)], x, -y, na.last = TRUE))
)
})
test_that("setorder places NAs last", {
dt <- lazy_dt(tibble(x = c("b", NA, "a")), "DT")
dt$needs_copy <- TRUE
# Works with implicit copy
res <- dt %>%
arrange(x) %>%
as.data.table()
expect_equal(res$x, c("a", "b", NA))
})
test_that("works with a transmute expression", {
dt <- lazy_dt(data.frame(x = 1:3, y = 1:3), "DT")
step <- dt %>%
arrange(x + 1)
expect_equal(show_query(step), expr(DT[order(x + 1)]))
# Works with complex expression
step <- dt %>%
arrange(-(x + y))
expect_equal(show_query(step), expr(DT[order(-(x + y))]))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.