我试图将ggplot2在函数中的使用转换为使用整洁的求值,以避免求值时出现警告消息。(),这些需要转换为aes()。我可以处理只有列名作为字符传递的情况。但是,我一直无法工作如何处理的情况下,字符是一个数学表达式。
下面是我试图解决的问题的一个可重复的小例子。
library(ggplot2)
set.seed(1)
dat <- data.frame(x=rnorm(100),y=rnorm(100))
xvar <- 'x+100'
yvar <- 'y'
#This works but uses the deprecated aes_string
ggplot(dat,aes_string(x=xvar,y=yvar))
#This works
ggplot(dat, ggplot2::aes(x=x+100, y=.data[[yvar]])) + geom_point()
#This does not work
ggplot(dat, aes(x={{xvar}}, y=.data[[yvar]])) + geom_point()
我的问题是,我需要使用什么简洁的求值技术才能像aes_string()那样使用xvar指定x变量?
2条答案
按热度按时间xu3bshqb1#
您可以使用
eval(str2expression())
:或者使用类似的rlang函数:
注意,您可能希望使用
labs()
手动设置轴标签;否则你会得到,例如,x轴为"eval(str2expression(xvar))"
。9w11ddsr2#
可能需要
parse_expr/eval
或者,另一种选择是插值并执行
eval/parse