如何使用 pmap 进行准量化?
How to use quasiqutation with pmap?
我创建了一个函数 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
我该如何解决这个问题?
(请注意,您对 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 )
我创建了一个函数 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
我该如何解决这个问题?
(请注意,您对 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 )