English · PDF 340
并且需要相当多的簿记代码,这些代码在每个 for 循环中都会重复。函数式编程(FP)提供了将这些重复代码提取出来的工具,因此每种常见的 for 循环模式都有其对应的函数。一旦你掌握了函数式编程的词汇,你就能用更少的代码、更轻松的方式、更少的错误来解决许多常见的迭代问题。
在你掌握了 base R 提供的 for 循环之后,你将学习 purrr 提供的一些强大的编程工具,它是 tidyverse 核心包之一。
library(tidyverse)
假设我们有这个简单的 tibble:
df <- tibble( a = rnorm(10), b = rnorm(10), c = rnorm(10), d = rnorm(10) )
我们想计算每一列的中位数。你可以用复制粘贴的方式来做:
median(df$a) #> [1] -0.246 median(df$b) #> [1] -0.287 median(df$c) #> [1] -0.0567 median(df$d) #> [1] 0.144
但这违反了我们的经验法则:复制粘贴永远不要超过两次。相反,我们可以使用 for 循环:
output <- vector("double", ncol(df)) # 1. 输出 for (i in seq_along(df)) { # 2. 序列 output[[i]] <- median(df[[i]]) # 3. 循环体 } output #> [1] -0.2458 -0.2873 -0.0567 0.1443