我创建一个函数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
我该如何解决?
答案 0 :(得分:1)
(请注意,您对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 )