←
PDF 362 / 520 Other Patterns of For Loops
→
English · PDF 362
Original PDF page 362
中文 · PDF 362

walk(print) #> [1] 1 #> [1] "a" #> [1] 3

与 walk2() 或 pwalk() 相比,walk() 通常没那么有用。例如,如果你有一个绘图列表和一个文件名向量,可以使用 pwalk() 将每个文件保存到磁盘上对应的位置:

library(ggplot2) plots <- mtcars %>% split(.$cyl) %>% map(~ggplot(., aes(mpg, wt)) + geom_point()) paths <- stringr::str_c(names(plots), ".pdf") pwalk(list(paths, plots), ggsave, path = tempdir())

walk()、walk2() 和 pwalk() 都会不可见地返回第一个参数 .x。这使得它们适合在管道的中间使用。

for 循环的其他模式

purrr 提供了许多其他函数,用于对其他类型的 for 循环进行抽象。你会比 map 系列函数更少用到它们,但了解它们是有用的。这里的目标是简要演示每个函数,这样将来遇到类似问题时,希望你能想起它们。然后你可以查阅文档以了解更多细节。

谓词函数

许多函数会与返回单个 TRUE 或 FALSE 的谓词函数一起工作。

keep() 和 discard() 分别保留谓词为 TRUE 或 FALSE 的输入元素:

iris %>% keep(is.factor) %>% str() #> 'data.frame': 150 obs. of 1 variable: #> $ Species: Factor w/ 3 levels "setosa","versicolor",..: ... iris %>% discard(is.factor) %>% str() #> 'data.frame': 150 obs. of 4 variables: