首页 > 解决方案 > purrr::walk 是一个 noop 但具有相同参数的 purr::map 不是

问题描述

出于某种原因,具有相同的论点,purrr::walkpurrr::map表现出不同的行为。

这是一个最小的可重现示例:

library(ggplot2)
library(purrr)
library(dplyr)

suv <- mpg %>% filter(class == "suv")
compact <- mpg %>% filter(class == "compact")

purrr::walk(list(suv, compact), ~ggplot(.,aes(displ, hwy)) + geom_point())
# No output

purrr::map(list(suv, compact), ~ggplot(.,aes(displ, hwy)) + geom_point())
# Generates two plots

通过查看purrr源代码,我可以看出这 walk只是一个map无形地返回.x参数的包装器:

purrr::walk <- function(.x, .f, ...)
{
    map(.x, .f, ...)
    invisible(.x)
}

出于这个原因,我不明白为什么行为会有所不同。这与惰性评估有关吗?没有使用的返回值map是否会阻止.f被评估?

标签: rggplot2lazy-evaluationpurrr

解决方案


推荐阅读