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

在tidyverse过滤中使用与变量同名的字符串,{{}}语法为何无效?

问题解答

你用{{ spalte }}的写法确实不可行,核心原因是curly-curly({{ }})操作符的作用是注入符号/表达式,而非解析字符串变量:

  • 你的spalte是一个字符串值("fte2020"),当你用{{ spalte }}时,它会直接把这个字符串当成列名去匹配,而你的tibble里并没有名为"fte2020"(带引号的字符串)的列,实际列名是fte2020(符号形式),所以会报错找不到对应列。

为什么你的其他写法可行

  • get(spalte):get()函数会根据字符串在当前环境中查找对应的对象,这里就是定位到tibble里的fte2020列
  • .data[[spalte]]:.data是tidyverse中专门指代数据框的代词,双括号[[ ]]支持通过字符串索引到对应的列,这也是tidyverse官方推荐的处理字符串列名的方式

如果想用{{ }}怎么改?

如果一定要用curly-curly,需要先把字符串转换成符号(symbol),用rlang::sym()来实现:

library(rlang)
jahr <- 2020
test <- tibble(jahr = c(2019, 2020), fte2020 = c(10, 11), fte2021 = c(12,13))
spalte <- sym(paste0("fte", jahr))

test %>% filter({{ spalte }} == 11)

这里sym()把字符串"fte2020"转成了符号fte2020,{{ }}再把这个符号注入到filter()的表达式中,就等价于直接写fte2020 == 11,自然就能正常过滤了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:33:29