當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。