Я хотел бы использовать формулу ~ . %% 1 == 0
в аргументе .predicate
для mutate_if
следующим образом:
dta %>%
mutate_if(.predicate = ~ . %% 1 == 0,
.funs = funs(. + 10))
, где dta
соответствует следующему значению:
dta <- tibble(colA = c("a", "b"),
colB = 1:2,
colC = c(1.1, 2.2))
В настоящее время возникает следующая ошибка:
Ошибка в .%%1
: нечисловой аргумент для двоичного оператора
Фон
Вдокументация dplyr::mutate_if
гласит:
.predicate Функция предиката, применяемая к столбцам или логическому вектору.Переменные, для которых .predicate равен или возвращает TRUE, выбраны.Этот аргумент передается в rlang::as_function()
и, таким образом, поддерживает лямбда-функции в стиле quosure и строки, представляющие имена функций.
Следовательно, формулу ~ . %% 1 == 0
можно использовать следующим образом:
f_rlang_check <- rlang::as_function( ~ . %% 1 == 0)
f_rlang_check(c(1.1, 1))
[1] FALSE TRUE
Очевидно, что формула верна;однако он не может быть напрямую передан в rlang::as_function()
, как показано выше.
dta %>%
mutate_if(.predicate = f_rlang_check,
.funs = funs(. + 10))
выдает одинаковую ошибку