Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mutate\u if.predicate参数中正确使用rlang::as\u函数公式_R_Dplyr_Mutate_Rlang - Fatal编程技术网

在mutate\u if.predicate参数中正确使用rlang::as\u函数公式

在mutate\u if.predicate参数中正确使用rlang::as\u函数公式,r,dplyr,mutate,rlang,R,Dplyr,Mutate,Rlang,我想使用~.%1==0在中的公式。谓词的参数如果发生变化,则按以下方式进行: dta %>% mutate_if(.predicate = ~ . %% 1 == 0, .funs = funs(. + 10)) f_rlang_check <- rlang::as_function( ~ . %% 1 == 0) f_rlang_check(c(1.1, 1)) [1] FALSE TRUE 其中,dta对应于以下TIBLE: dta

我想使用
~.%1==0
中的公式。谓词
的参数
如果
发生变化,则按以下方式进行:

dta %>%
    mutate_if(.predicate =  ~ . %% 1 == 0,
              .funs = funs(. + 10))
f_rlang_check <- rlang::as_function( ~ . %% 1 == 0)

f_rlang_check(c(1.1, 1))
[1] FALSE  TRUE
其中,
dta
对应于以下TIBLE:

dta <- tibble(colA = c("a", "b"),
              colB = 1:2,
              colC = c(1.1, 2.2))
显然,这个公式是正确的;但是,它不能直接传递给,如上所示

dta %>%
    mutate_if(.predicate = f_rlang_check,
              .funs = funs(. + 10))

如果将尝试对所有列的谓词函数求值,则会产生相同的错误

mutate\u,因此在尝试将二进制运算符
%%
与非数字参数
colA
一起使用时会出现错误。您可以使用
is.numeric
&&
解决此问题

谓词应返回单个逻辑值,因此您可能希望使用
all
any

dta %>%
    mutate_if(.predicate = ~ is.numeric(.) && all(. %% 1 == 0),
              .funs = funs(. + 10))

非常感谢,现在我知道问题出在哪里了。为什么决定使用
&
插入部分
&
,如果在使用
.谓词时只关注第一个值的比较,或总是逐个比较,则存在错误结果的风险?如果使用
&
,则将对
&
的两侧进行评估,在这种情况下会产生错误。使用
&&
,只有当LHS为
真时,才会对RHS进行评估(如果为
,则总结果为
,因此不需要检查RHS)。文档以一种不明显的方式说明了这一点,即“评估仅在确定结果之前进行”。非常好,非常感谢。