r - rlang - 创建带有卷曲的字符串以供稍后评估
问题描述
我正在尝试创建一个字符串,其中包含“大括号”和用户基于的对象。然后我将在 ggplot 命令中解析和评估这个表达式。
test_func <- function(df, x_var, y_var, color_by){
color_aes <- ifelse(!missing(color_by),
glue::glue("aes(color = {{{color_by}}})"), "") %>%
rlang::expr()
df %>%
ggplot(aes(x = {{x_var}}, y = {{y_var}})) +
geom_point(rlang::eval_tidy(rlang::parse_expr(color_aes)))
}
test_func(mtcars, cyl, disp)
test_func(mtcars, cyl, disp, carb)
两个问题:
- 是否可以在第一次调用 curly curly 时创建一个带有 curly curly 的字符串而不对其进行评估?
- 如何将空字符串传递给
rlang::parse_expr()
?
谢谢
解决方案
在这种情况下,我不建议使用字符串。您应该能够aes()
更轻松地处理对象。例如
test_func <- function(df, x_var, y_var, color_by){
color_aes <- if(!missing(color_by))
aes(color = {{color_by}}) else aes()
df %>%
ggplot(aes(x = {{x_var}}, y = {{y_var}})) +
geom_point(color_aes)
}
推荐阅读
- database - 如何在小范围内创建 facebook 数据库图
- github - 在这样的情况下,我该怎么办?
- package - 如何禁用apt包
- javascript - 将元素按钮更改为图像
- c# - 为公共交通中的所有消费者设置队列参数
- javascript - 制作 UMD 库时如何处理 fetch 等功能(适用于浏览器/节点)
- android-studio - Android Studio 中的主题未正确更改
- node.js - 如何使用 greenlock-express 在 node.js 上获取 SSL?
- git - 为什么“git fetch origin bugfix”不起作用?
- apache-kafka - kafka connect hdfs sink 滞后监控