我花了一段时间才明白,在带有粘合语法列名的变异函数中使用函数中的列名时,必须使用ensym.理由是什么,为什么我必须使用ensym?为什么{{}}{}还不够用呢?

工作正常:

a <- 1:5
data_set <- tibble(a,x=a*2)

test_function <- function(data,var_x){
  var_x <- ensym(var_x)
  data %>% mutate("is_four_in_{var_x}":=if_else({{var_x}}==4,{{var_x}},NA_integer_)) %>% 
    return()
}


data_set %>% test_function(x)

但如果

var_x <- ensym(var_x)被移走,我就得到

Error in eval(parse(text = text, keep.source = FALSE), envir) :
object 'x' not found 

推荐答案

实际上,更重要的是,要使用glue语法,需要额外的{}.所以你真的需要

test_function <- function(data,var_x){
  data %>% 
  mutate("is_four_in_{{var_x}}":=if_else({{var_x}}==4,{{var_x}},NA_integer_)) %>% 
    return()
}

如果你只有一个{},那只是一个简单的字符串值.您需要额外的{}来获取捕获的符号名称.将其与

test_function <- function(data,var_x){
  number <- "four"
  data %>% 
  mutate("is_{number}_in_{{var_x}}":=if_else({{var_x}}==4,{{var_x}},NA_integer_)) %>% 
    return()
}

R相关问答推荐

如何删除字符串中重复的字符序列?

如何在x轴下方画一条带有箭头的线?

使用lapply的重新定位功能

在ggplot Likert条中添加水平线

次级y轴R gggplot2

如何在编辑列时更新可编辑数据表,并使用该表在Shiny中执行连续计算

迭代通过1个长度的字符串长字符R

为什么当用osmdata映射R时会得到相邻状态?

如何使用列表中多个列表中的第一条记录创建数据框

函数可以跨多个列搜索多个字符串并创建二进制输出变量

为什么在BASE R中绘制线条时会看到线上的点?

防止在更新SHINY中的Reactive Value的部分内容时触发依赖事件

如何筛选截止年份之前最后一个测量年度的所有观测值以及截止年份之后所有年份的所有观测值

防止正则表达式覆盖以前的语句

自定义交互作用图的标签

如何在R中创建条形图,使条形图在y轴上围绕0.5而不是0构建条形图?

计算来自单独分组的分幅的值的百分位数

整理ggmosaic图的标签

如何使用grepl()在数据帧列表中 Select 特定字符串?

在不重复主题的情况下重新排列组