将存储的公式函数传入dplyr::across报错,求rlang解决方法
解决方案
要解决这个问题,你需要使用rlang的**!!(bang-bang)操作符**,或者直接传递公式对象(无需rlang::eval_tidy)。
正确代码示例1:直接传递公式对象
library(dplyr) f <- ~ sum(.x) / sum(vs) mtcars %>% dplyr::summarise( dplyr::across(mpg, f) ) #> mpg #> 1 45.92143
正确代码示例2:使用!!操作符
library(dplyr) library(rlang) f <- ~ sum(.x) / sum(vs) mtcars %>% dplyr::summarise( dplyr::across(mpg, !!f) ) #> mpg #> 1 45.92143
问题原因
你之前使用rlang::eval_tidy(f)时,会提前在当前环境对公式求值,导致dplyr无法识别上下文里的vs变量。而直接传递公式对象或用!!操作符,会让dplyr保留公式的上下文环境,正确识别.x(当前处理的列)和vs(数据框中的变量),完成计算。
内容的提问来源于stack exchange,提问作者olivroy
相关产品推荐
相关产品推荐

