You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将存储的公式函数传入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:31:10