当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R purrr map_dfr 返回数据帧的函数


[Superseded]

这些 map()map2()imap()pmap() 变体通过 row-binding 或 column-binding 输出一起返回数据帧。

这些函数在 purrr 1.0.0 中被取代,因为它们的名称表明它们的工作方式类似于 _lgl()_int() 等,需要长度为 1 的输出,但实际上它们返回任意大小的结果,因为结果在组合时没有任何大小检查。此外,他们使用dplyr::bind_rows()dplyr::bind_cols(),这需要安装dplyr并且与边情况具有令人困惑的语义。被取代的函数不会消失,但只会收到关键的错误修复。

相反,我们建议将 map()map2() 等与 list_rbind()list_cbind() 一起使用。它们在底层使用vctrs::vec_rbind()vctrs::vec_cbind(),并且具有更清楚地反映其语义的名称。

用法

map_dfr(.x, .f, ..., .id = NULL)

map_dfc(.x, .f, ...)

imap_dfr(.x, .f, ..., .id = NULL)

imap_dfc(.x, .f, ...)

map2_dfr(.x, .y, .f, ..., .id = NULL)

map2_dfc(.x, .y, .f, ...)

pmap_dfr(.l, .f, ..., .id = NULL)

pmap_dfc(.l, .f, ...)

参数

.id

字符串或 NULL 。如果是字符串,则输出将包含具有该名称的变量,存储输入的名称(如果 .x 已命名)或索引(如果 .x 未命名)。如果是 NULL ,默认情况下,不会创建任何变量。

仅适用于_dfr 变体。

例子

# map ---------------------------------------------
# Was:
mtcars |>
  split(mtcars$cyl) |>
  map(\(df) lm(mpg ~ wt, data = df)) |>
  map_dfr(\(mod) as.data.frame(t(as.matrix(coef(mod)))))
#>   (Intercept)        wt
#> 1    39.57120 -5.647025
#> 2    28.40884 -2.780106
#> 3    23.86803 -2.192438

# Now:
mtcars |>
  split(mtcars$cyl) |>
  map(\(df) lm(mpg ~ wt, data = df)) |>
  map(\(mod) as.data.frame(t(as.matrix(coef(mod))))) |>
  list_rbind()
#>   (Intercept)        wt
#> 1    39.57120 -5.647025
#> 2    28.40884 -2.780106
#> 3    23.86803 -2.192438

# map2 ---------------------------------------------

ex_fun <- function(arg1, arg2){
  col <- arg1 + arg2
  x <- as.data.frame(col)
}
arg1 <- 1:4
arg2 <- 10:13

# was
map2_dfr(arg1, arg2, ex_fun)
#>   col
#> 1  11
#> 2  13
#> 3  15
#> 4  17
# now
map2(arg1, arg2, ex_fun) |> list_rbind()
#>   col
#> 1  11
#> 2  13
#> 3  15
#> 4  17

# was
map2_dfc(arg1, arg2, ex_fun)
#> New names:
#> • `col` -> `col...1`
#> • `col` -> `col...2`
#> • `col` -> `col...3`
#> • `col` -> `col...4`
#>   col...1 col...2 col...3 col...4
#> 1      11      13      15      17
# now
map2(arg1, arg2, ex_fun) |> list_cbind()
#> New names:
#> • `col` -> `col...1`
#> • `col` -> `col...2`
#> • `col` -> `col...3`
#> • `col` -> `col...4`
#>   col...1 col...2 col...3 col...4
#> 1      11      13      15      17

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Functions that return data frames。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。