如何在pmap中使用准报价?

时间:2018-10-18 13:23:42

标签: r rlang

我创建一个函数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进行迭代。我只用1次迭代就尝试了,但出现错误:

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

我该如何解决?

1 个答案:

答案 0 :(得分:1)

(请注意,您对f1的定义从不使用参数title。)

如果要遍历多列(例如disphp等),一种方法是使用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 )