English · 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 #>
或者,你有一个向量列表,想求它们的交集:
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