←
PDF 351 / 520 The Map Functions
→
English · PDF 351
Original PDF page 351
中文 · PDF 351

映射函数

对向量进行循环、对每个元素执行某种操作并保存结果,这种模式非常常见,以至于 purrr 包提供了一族函数来替你完成。每种输出类型对应一个函数:

  • map() 生成一个列表。
  • map_lgl() 生成一个逻辑向量。
  • map_int() 生成一个整数向量。
  • map_dbl() 生成一个双精度浮点数向量。
  • map_chr() 生成一个字符向量。

每个函数都将一个向量作为输入,对每个元素应用一个函数,然后返回一个与输入长度相同(且名称相同)的新向量。向量的类型由 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