I need to allow the users of a function to add new columns with strings created from the values of the supplied tibble. A simple illustration:
df <- data.frame(session=rep(LETTERS[1:3],2),
bundle=rep(letters[1:2],3),
xn1=sample(1:100,6),
xn2=sample(1:100,6))
myfun <- function(df, ...){
dplyr::mutate(.data=df,!!!rlang::enexprs(...)) |>
dplyr::mutate(across(where(is.character),~ glue::glue))
}
myfun(df,a=session,b="dsds{session}")
which if the df
is this:
> df
session bundle xn1 xn2
1 A a 31 95
2 B b 45 64
3 C a 12 38
4 A b 56 13
5 B a 70 93
6 C b 53 73
then I want to get this output if myfun
> myfun(df,a=session,b="dsds{a}")
session bundle xn1 xn2 a b
1 A a 31 95 A dsdsA
2 B b 45 64 B dsdsB
3 C a 12 38 C dsdsC
4 A b 56 13 D dsdsA
5 B a 70 93 B dsdsB
6 C b 53 73 C dsdsC
But right now I get the errors that glue
could not find the session
values.
Error in `dplyr::mutate()` at test.R:14:2:
ℹ In argument: `across(where(is.character), ~glue::glue)`.
Caused by error in `across()`:
! Can't compute column `a`.
Caused by error in `dplyr_internal_error()`:
Run `rlang::last_trace()` to see where the error occurred.
Please note that I am not just trying to change the tibble. What I need is to create the myfun()
function that would allow the user to create columns in the tibble flexibly.