代码之家  ›  专栏  ›  技术社区  ›  Dambo

如何在pmap中使用quasiquitation?

  •  1
  • Dambo  · 技术社区  · 7 年前

    我创建了一个函数 f1 绘制一个图表,从中传递不带引号的变量名 mtcars . 以下工作正常:

    f1 <- function(dt, title, var) {
      var <- enquo(var)
      ggplot(dt) +
      geom_line(aes(x = mpg, y = !!var)) +
        ggtitle(var)
    }
    f1(mtcars, var = disp)  
    

    现在,我想使用 pmap . 我只是在一次迭代中尝试,但我得到了一个错误:

    pmap(list(data = mtcars, title = disp, var = disp), f1)
    >Error in is.data.frame(.l) : object 'disp' not found
    

    我该怎么解决这个问题?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Artem Sokolov    7 年前

    f1 title .)

    如果您在多个列上迭代(例如。, disp hp 一种方法是 rlang::exprs()

    l1 <- list(mtcars, mtcars)
    l2 <- list("Title", "Not Used")
    l3 <- rlang::exprs(disp, hp)
    
    pmap( list(l1,l2,l3), f1 )
    

    如果在多个数据帧上进行迭代,但绘制的是同一个变量,那么只需将表达式作为 ... pmap :

    pmap( list(l1), f1, "My Title", disp )
    

    map( l1, f1, "My Title", disp )