# across(.unpack =) errors if the unpacked data frame has non-unique names Code duckplyr_mutate(df, across(x:y, fn, .unpack = "{outer}")) Condition Error in `mutate()`: i In argument: `across(x:y, fn, .unpack = "{outer}")`. Caused by error in `across()`: ! Names must be unique. x These names are duplicated: * "x" at locations 1 and 2. * "y" at locations 3 and 4. # `.unpack` is validated Code duckplyr_summarise(df, across(x, mean, .unpack = 1)) Condition Error in `summarise()`: i In argument: `across(x, mean, .unpack = 1)`. Caused by error in `across()`: ! `.unpack` must be `TRUE`, `FALSE`, or a single string, not the number 1. --- Code duckplyr_summarise(df, across(x, mean, .unpack = c("x", "y"))) Condition Error in `summarise()`: i In argument: `across(x, mean, .unpack = c("x", "y"))`. Caused by error in `across()`: ! `.unpack` must be `TRUE`, `FALSE`, or a single string, not a character vector. --- Code duckplyr_summarise(df, across(x, mean, .unpack = NA)) Condition Error in `summarise()`: i In argument: `across(x, mean, .unpack = NA)`. Caused by error in `across()`: ! `.unpack` must be `TRUE`, `FALSE`, or a single string, not `NA`. # across() throws meaningful error with failure during expansion (#6534) Code duckplyr_summarise(df, across(everything(), fn())) Condition Error in `summarise()`: i In argument: `across(everything(), fn())`. Caused by error in `fn()`: ! oh no! --- Code duckplyr_summarise(df, across(everything(), fn()), .by = g) Condition Error in `summarise()`: i In argument: `across(everything(), fn())`. Caused by error in `fn()`: ! oh no! # across() gives meaningful messages Code (expect_error(tibble(x = 1) %>% duckplyr_summarise(across(where(is.numeric), 42))) ) Output Error in `summarise()`: i In argument: `across(where(is.numeric), 42)`. Caused by error in `across()`: ! `.fns` must be a function, a formula, or a list of functions/formulas. Code (expect_error(tibble(x = 1) %>% duckplyr_summarise(across(y, mean)))) Output Error in `summarise()`: i In argument: `across(y, mean)`. Caused by error in `across()`: ! Can't subset columns that don't exist. x Column `y` doesn't exist. Code (expect_error(tibble(x = 1) %>% duckplyr_summarise(res = across(where( is.numeric), 42)))) Output Error in `summarise()`: i In argument: `res = across(where(is.numeric), 42)`. Caused by error in `across()`: ! `.fns` must be a function, a formula, or a list of functions/formulas. Code (expect_error(tibble(x = 1) %>% duckplyr_summarise(z = across(y, mean)))) Output Error in `summarise()`: i In argument: `z = across(y, mean)`. Caused by error in `across()`: ! Can't subset columns that don't exist. x Column `y` doesn't exist. Code (expect_error(tibble(x = 1) %>% duckplyr_summarise(res = sum(if_any(where( is.numeric), 42))))) Output Error in `summarise()`: i In argument: `res = sum(if_any(where(is.numeric), 42))`. Caused by error in `if_any()`: ! `.fns` must be a function, a formula, or a list of functions/formulas. Code (expect_error(tibble(x = 1) %>% duckplyr_summarise(res = sum(if_all(~ mean(.x))))) ) Output Error in `summarise()`: i In argument: `res = sum(if_all(~mean(.x)))`. Caused by error in `if_all()`: ! Must supply a column selection. i You most likely meant: `if_all(everything(), ~mean(.x))`. i The first argument `.cols` selects a set of columns. i The second argument `.fns` operates on each selected columns. Code (expect_error(tibble(x = 1) %>% duckplyr_summarise(res = sum(if_any(~ mean(.x))))) ) Output Error in `summarise()`: i In argument: `res = sum(if_any(~mean(.x)))`. Caused by error in `if_any()`: ! Must supply a column selection. i You most likely meant: `if_any(everything(), ~mean(.x))`. i The first argument `.cols` selects a set of columns. i The second argument `.fns` operates on each selected columns. Code (expect_error(across())) Output Error in `across()`: ! Must only be used inside data-masking verbs like `mutate()`, `filter()`, and `group_by()`. Code (expect_error(c_across())) Output Error in `c_across()`: ! Must only be used inside data-masking verbs like `mutate()`, `filter()`, and `group_by()`. Code error_fn <- (function(.) { if (all(. > 10)) { rlang::abort("too small", call = call("error_fn")) } else { 42 } }) (expect_error(tibble(x = 1:10, y = 11:20) %>% duckplyr_summarise(across( everything(), error_fn)))) Output Error in `summarise()`: i In argument: `across(everything(), error_fn)`. Caused by error in `across()`: ! Can't compute column `y`. Caused by error in `error_fn()`: ! too small Code (expect_error(tibble(x = 1:10, y = 11:20) %>% duckplyr_mutate(across(everything(), error_fn)))) Output Error in `mutate()`: i In argument: `across(everything(), error_fn)`. Caused by error in `across()`: ! Can't compute column `y`. Caused by error in `error_fn()`: ! too small Code (expect_error(tibble(x = 1:10, y = 11:20) %>% duckplyr_summarise(force(across( everything(), error_fn))))) Output Error in `summarise()`: i In argument: `force(across(everything(), error_fn))`. Caused by error in `across()`: ! Can't compute column `y`. Caused by error in `error_fn()`: ! too small Code (expect_error(tibble(x = 1:10, y = 11:20) %>% duckplyr_mutate(force(across( everything(), error_fn))))) Output Error in `mutate()`: i In argument: `force(across(everything(), error_fn))`. Caused by error in `across()`: ! Can't compute column `y`. Caused by error in `error_fn()`: ! too small Code (expect_error(tibble(x = 1) %>% duckplyr_summarise(across(everything(), list(f = mean, f = mean))))) Output Error in `summarise()`: i In argument: `across(everything(), list(f = mean, f = mean))`. Caused by error in `across()`: ! Names must be unique. x These names are duplicated: * "x_f" at locations 1 and 2. # if_any() and if_all() aborts when predicate mistakingly used in .cols= (#5732) Code (expect_error(duckplyr_filter(df, if_any(~ .x > 5)))) Output Error in `filter()`: i In argument: `if_any(~.x > 5)`. Caused by error in `if_any()`: ! Must supply a column selection. i You most likely meant: `if_any(everything(), ~.x > 5)`. i The first argument `.cols` selects a set of columns. i The second argument `.fns` operates on each selected columns. Code (expect_error(duckplyr_filter(df, if_all(~ .x > 5)))) Output Error in `filter()`: i In argument: `if_all(~.x > 5)`. Caused by error in `if_all()`: ! Must supply a column selection. i You most likely meant: `if_all(everything(), ~.x > 5)`. i The first argument `.cols` selects a set of columns. i The second argument `.fns` operates on each selected columns. Code (expect_error(duckplyr_filter(df, !if_any(~ .x > 5)))) Output Error in `filter()`: i In argument: `!if_any(~.x > 5)`. Caused by error in `if_any()`: ! Must supply a column selection. i You most likely meant: `if_any(everything(), ~.x > 5)`. i The first argument `.cols` selects a set of columns. i The second argument `.fns` operates on each selected columns. Code (expect_error(duckplyr_filter(df, !if_all(~ .x > 5)))) Output Error in `filter()`: i In argument: `!if_all(~.x > 5)`. Caused by error in `if_all()`: ! Must supply a column selection. i You most likely meant: `if_all(everything(), ~.x > 5)`. i The first argument `.cols` selects a set of columns. i The second argument `.fns` operates on each selected columns. # inlined and non inlined lambdas work Code (expect_error(df %>% duckplyr_mutate(across(1:2, ~ .y + mean(bar))))) Output Error in `mutate()`: i In argument: `across(1:2, ~.y + mean(bar))`. Caused by error in `across()`: ! Can't compute column `foo`. Caused by error: ! the ... list contains fewer than 2 elements Code (expect_error(df %>% duckplyr_mutate((across(1:2, ~ .y + mean(bar)))))) Output Error in `mutate()`: i In argument: `(across(1:2, ~.y + mean(bar)))`. Caused by error in `across()`: ! Can't compute column `foo`. Caused by error in `fn()`: ! the ... list contains fewer than 2 elements # anonymous function `.fns` can access the `.data` pronoun even when not inlined Code duckplyr_mutate(df, across(y, fn)) Condition Error in `mutate()`: i In argument: `across(y, fn)`. Caused by error in `across()`: ! Can't compute column `y`. Caused by error: ! Can't subset `.data` outside of a data mask context. # can't rename during selection (#6522) Code duckplyr_mutate(df, z = c_across(c(y = x))) Condition Error in `mutate()`: i In argument: `z = c_across(c(y = x))`. Caused by error in `c_across()`: ! Can't rename variables in this context. # across() applies old `.cols = everything()` default with a warning Code out <- duckplyr_mutate(df, across(.fns = times_two)) Condition Warning: There was 1 warning in `mutate()`. i In argument: `across(.fns = times_two)`. Caused by warning: ! Using `across()` without supplying `.cols` was deprecated in dplyr 1.1.0. i Please supply `.cols` instead. # if_any() and if_all() apply old `.cols = everything()` default with a warning Code out <- duckplyr_filter(df, if_any()) Condition Warning: Using `if_any()` without supplying `.cols` was deprecated in dplyr 1.1.0. i Please supply `.cols` instead. # across errors with non-empty dots and no `.fns` supplied (#6638) Code duckplyr_mutate(df, across(x, .funs = ~ . * 1000)) Condition Error in `mutate()`: i In argument: `across(x, .funs = ~. * 1000)`. Caused by error in `across()`: ! `...` must be empty. x Problematic argument: * .funs = ~. * 1000 # across(...) is deprecated Code duckplyr_summarise(df, across(everything(), mean, na.rm = TRUE)) Condition Warning: There was 1 warning in `summarise()`. i In argument: `across(everything(), mean, na.rm = TRUE)`. Caused by warning: ! The `...` argument of `across()` is deprecated as of dplyr 1.1.0. Supply arguments directly to `.fns` through an anonymous function instead. # Previously across(a:b, mean, na.rm = TRUE) # Now across(a:b, \(x) mean(x, na.rm = TRUE)) Output # A tibble: 1 x 1 x 1 1