English · PDF 351
对向量进行循环、对每个元素执行某种操作并保存结果,这种模式非常常见,以至于 purrr 包提供了一族函数来替你完成。每种输出类型对应一个函数:
每个函数都将一个向量作为输入,对每个元素应用一个函数,然后返回一个与输入长度相同(且名称相同)的新向量。向量的类型由 map 函数的后缀决定。
一旦掌握了这些函数,你会发现解决迭代问题所需的时间大大减少。但是,你完全不必因为使用 for 循环而不是 map 函数而感到不安。map 函数是抽象阶梯上更高的一级,理解它们的工作原理可能需要很长时间。重要的是解决你手头的问题,而不是写出最简洁优雅的代码(尽管这绝对是你应该努力追求的目标!)。
有些人会告诉你避免使用 for 循环,因为它们很慢。他们错了!(好吧,至少他们的说法已经过时了,因为 for 循环很多年前就不慢了)。使用 map() 这类函数的主要好处不是速度,而是清晰性:它们让你的代码更易于编写和阅读。
我们可以使用这些函数来执行与上一个 for 循环相同的计算。那些汇总函数返回的是双精度浮点数,所以我们需要使用 map_dbl():
map_dbl(df, mean) #> a b c d #> 0.2026 -0.2068 0.1275 -0.0917 map_dbl(df, median) #> a b c d #> 0.237 -0.218 0.254 -0.133