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

使用mutate+across结合case_when动态应用条件时出现递归错误的排查

问题原因与解决方法

错误根源

  1. 列表提取方式错误:你用case_when_exprs[cur_column()]提取的是子列表(而非列表内的表达式集合),!!!展开子列表会导致case_when接收到错误的参数结构,触发递归求值冲突。
  2. .data引用上下文冲突:在across的匿名函数中,.data指向整个数据框的mask,直接使用.data会和当前正在求值的列promise产生递归引用。

修正代码

步骤1:调整表达式中的列引用

将表达式里的.data替换为across匿名函数中代表当前列的.x:

case_when_exprs <- list("value" =  rlang::exprs(.x == "a" ~ "A", TRUE ~ .x))

步骤2:正确提取表达式并展开

用[[而非[提取列表内的表达式集合,确保!!!能正确展开case_when的条件对:

df <- tibble(value=c("a","b","c"))

# 动态调用成功运行
df %>% mutate(across(names(case_when_exprs), ~ case_when(!!!case_when_exprs[[cur_column()]])))

验证结果

运行后输出符合预期:

# A tibble: 3 × 1
  value
  <chr>
1 A    
2 b    
3 c    

内容的提问来源于stack exchange,提问作者Julio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:31:17