在ggplot2
和dplyr
中,函数不需要引用变量的列名。以下是一些例子:
# A plot example
library(ggplot2)
ggplot(mtcars, aes(mpg, cyl)) +
geom_point()
# A dplyr example
library(dplyr)
mtcars %>%
select(cyl)
但是,如果我们尝试在函数中直接复制它,它会抱怨无法找到未查询的对象:
foo <- function(df, x){
df %>%
select(x)
}
foo(mtcars, cyl)
FUN中的错误(X [[i]],...):找不到对象'cyl'
如何在我自己的函数中复制这些包的行为,以便添加不带引号的变量不会导致上述错误?
我知道我们可以在dplyr中使用下划线版本的函数来使用字符串,或在aes_string()
中使用ggplot
。例如:
foo2 <- function(df, x){
df %>%
select_(x)
}
foo(mtcars, "cyl")
我希望找到一种与这些包中的方式一致的解决方案。我在GitHub上看了一下源代码,但它只是增加了混乱。
答案 0 :(得分:3)
您可以使用quosures来实现此目的。有关如何使用以及如何使用它的更多信息,请参阅this优秀文章
foo <- function(df, x){
x <- enquo(x)
df %>%
select(!!x)
}