我正在尝试了解不同的 quo/unquo 语法以及何时应该使用它们。
我主要编写传递数据框和列作为参数的函数——使用 ggplot 进行绘图或使用 dplyr 汇总/操作数据(group_by、summary、mutate 等)。然而,有时我还必须使用一个在我的整体函数中不使用 NSE 的函数。
根据我所读到的内容,我的理解是:
1)如果我引用数据框中的列,那么我不需要捕获环境,我可以使用ensymor sym。 它是否正确?使用 会出现问题enquo,还是没有必要?
2)如果我使用ensym用户可以在技术上在参数中输入字符串或裸列名称。
基于此,我的典型功能设置将如下所示:
library(tidyverse)
dataset <- mtcars
myfun <- function(dat, xvar, yvar, group){
#either manipulate data
x <- dat %>% group_by(!!ensym(group)) %>%
mutate(new = !!ensym(xvar)*5) %>%
summarize(medianx=median(!!ensym(xvar), na.rm=TRUE),
median_new=median(new, na.rm=TRUE))
#or plot data
p <- ggplot(dat, aes(x=!!ensym(xvar), y=!!ensym(yvar))) +
geom_point()
#sometime require referencing the column with NSE function..
median(dat[[xvar]]) #works if require string in argument
#how would you …Run Code Online (Sandbox Code Playgroud)