【发布时间】:2019-01-15 17:11:30
【问题描述】:
我想以下列方式在mutate_if 的.predicate 参数中使用~ . %% 1 == 0 公式:
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风格的lambda函数和字符串表示 函数名。
因此,公式~ . %% 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))
产生相同的错误
【问题讨论】: