首页 > 解决方案 > 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)

两个问题:

谢谢

标签: rtidyverserlang

解决方案


在这种情况下,我不建议使用字符串。您应该能够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)
}

推荐阅读