←
PDF 364 / 520 Exercises
→
English · PDF 364
Original PDF page 364
中文 · PDF 364

并且你想通过将这些元素连接在一起,把它们归约为单个数据框:

dfs <- list( age = tibble(name = "John", age = 30), sex = tibble(name = c("John", "Mary"), sex = c("M", "F")), trt = tibble(name = "Mary", treatment = "A") ) dfs %>% reduce(full_join) #> Joining, by = "name" #> Joining, by = "name" #> # A tibble: 2 × 4 #> name age sex treatment #> #> 1 John 30 M #> 2 Mary NA F A

或者,你有一个向量列表,想求它们的交集:

vs <- list( c(1, 3, 5, 6, 10), c(1, 2, 3, 7, 8, 10), c(1, 2, 3, 4, 8, 9, 10) ) vs %>% reduce(intersect) #> [1] 1 3 10

reduce 函数接受一个“二元”函数(即有两个主要输入的函数),并将它反复应用到一个列表上,直到只剩下一个元素为止。

accumulate 与之类似,但它会保留所有中间结果。你可以用它来实现累积求和:

x <- sample(10) x #> [1] 6 9 8 5 2 4 7 1 10 3 x %>% accumulate(+) #> [1] 6 15 23 28 30 34 41 42 52 55

练习

    1. 使用 for 循环实现你自己的 every() 版本。将它与 purrr::every() 进行比较。purrr 的版本做了哪些你的版本没有做的事情?