這些 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
相關用法
- R purrr map_depth 在給定深度映射/修改元素
- R purrr map_if 有條件地將函數應用於向量的每個元素
- R purrr map2 映射兩個輸入
- R purrr map 將函數應用於向量的每個元素
- R purrr modify_in 修改拔取位置
- R purrr modify_tree 遞歸修改列表
- R purrr modify 有選擇地修改元素
- R purrr accumulate 累積向量縮減的中間結果
- R purrr imap 將函數應用於向量的每個元素及其索引
- R purrr list_transpose 轉置列表
- R purrr as_vector 將列表強製轉換為向量
- R purrr array-coercion 強製數組列出
- R purrr auto_browse 包裝一個函數,以便在出錯時自動 browser()
- R purrr pluck 安全地獲取或設置嵌套數據結構深處的元素
- R purrr insistently 將函數轉換為等待,然後在錯誤後重試
- R purrr list_simplify 將列表簡化為原子或 S3 向量
- R purrr rerun 多次重新運行表達式
- R purrr quietly 包裝一個函數來捕獲副作用
- R purrr list_flatten 壓平列表
- R purrr pmap 同時映射多個輸入(“並行”)
- R purrr possibly 包裝函數以返回值而不是錯誤
- R purrr head_while 查找全部滿足謂詞的頭/尾。
- R purrr rbernoulli 從伯努利分布生成隨機樣本
- R purrr rate-helpers 創建延遲率設置
- R purrr keep_at 根據元素的名稱/位置保留/丟棄元素
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Functions that return data frames。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。