←
PDF 352 / 520 Shortcuts
→
English · PDF 352
Original PDF page 352
中文 · PDF 352

map_dbl(df, sd) #> a b c d #> 0.796 0.759 1.164 1.062

与使用 for 循环相比,重点在于要执行的操作(即 mean()、median()、sd()),而不是遍历每个元素并存储输出所需的簿记工作。如果我们使用管道,这一点会更加明显:

df %>% map_dbl(mean) #> a b c d #> 0.2026 -0.2068 0.1275 -0.0917 df %>% map_dbl(median) #> a b c d #> 0.237 -0.218 0.254 -0.133 df %>% map_dbl(sd) #> a b c d #> 0.796 0.759 1.164 1.062

map_*() 和 col_summary() 之间有一些区别:

  • 所有 purrr 函数都是用 C 语言实现的。这使得它们速度稍快,但牺牲了可读性。
  • 第二个参数 .f 是要应用的函数,可以是一个公式、字符向量或整数向量。你将在下一节中了解这些方便的快捷方式。
  • map_*() 使用 ...(“Dot-Dot-Dot (…)”,见第 284 页)在每次调用时向 .f 传递额外的参数:

map_dbl(df, mean, trim = 0.5) #> a b c d #> 0.237 -0.218 0.254 -0.133

  • map 函数还会保留名称:

z <- list(x = 1:3, y = 4:5) map_int(z, length) #> x y #> 3 2

快捷方式

你可以在 .f 中使用一些快捷方式,以节省一些输入。假设你想对数据集中的每个组拟合一个线性模型。下面的简单示例将 mtcars 数据集拆分为三部分(每个气缸值对应一部分),并对每部分拟合相同的线性模型: