我想将带引号的字符串传递给调用ggplot2的函数。
library(magrittr); library(ggplot2)
g1 <- function( variable ) {
ggplot(mtcars, aes_string("wt", variable, size="carb")) +
geom_point()
}
g1("mpg")
这很好用,但是v3.1.0 documentation主张准引号和NSE aes()
。
所有这些功能均已弃用。请改用整洁的评估习惯用法(请参阅aes()文档中的准引用部分)。
但是aes()
examples使用NSE( ie ,g1(mpg)
代替g1("mpg")
)。同样,这些SO解决方案使用NSE值或aes_()
/ aes_string()
。
我希望函数接受SE /引号字符串,以容纳字符向量,例如:
variables <- c("mpg", "cyl", "disp")
variables %>%
lapply(g1)
答案 0 :(得分:6)
您可以在调用!!
之后对变量使用sym
运算符来执行此操作。这将取消报价并评估周围环境中的variable
。
library(rlang)
g1 <- function( variable ) {
ggplot(mtcars, aes(x = wt, y = !! sym(variable) , size = "carb")) +
geom_point()
}
g1("mpg")
variables <- c("mpg", "cyl", "disp")
variables %>%
lapply(g1)
答案 1 :(得分:3)
一种解决方法是将通用名称替换为函数中所需的变量名称:
g1 <- function( variable ) {
colnames(mtcars) <- gsub(variable, "variable", colnames(mtcars))
ggplot(mtcars, aes(x=wt, y=variable, size=carb)) +
geom_point() + ylab(variable)
}
variables <- c("mpg", "cyl", "disp")
variables %>%
lapply(g1)