創建一個由多個函數組成的新函數,即 compose(f, g)
相當於 function(...) f(g(...))
。
參數
- ...
-
按順序應用的函數(默認從右到左)。公式以通常的方式轉換為函數。
支持Dynamic dots。特別是,如果您的函數存儲在列表中,您可以將其與
!!!
拚接。 - .dir
-
如果是
"backward"
(默認值),則按相反的順序(從右到左)調用函數,這與數學中的慣例一樣。如果是"forward"
,則從左到右調用它們。
副詞
該函數稱為副詞,因為它修飾函數(動詞)的效果。如果您想在包中包含創建副詞的函數,請務必閱讀faq-adverbs-export。
也可以看看
其他副詞:auto_browse()
, insistently()
, negate()
, partial()
, possibly()
, quietly()
, safely()
, slowly()
例子
not_null <- compose(`!`, is.null)
not_null(4)
#> [1] TRUE
not_null(NULL)
#> [1] FALSE
add1 <- function(x) x + 1
compose(add1, add1)(8)
#> [1] 10
fn <- compose(\(x) paste(x, "foo"), \(x) paste(x, "bar"))
fn("input")
#> [1] "input bar foo"
# Lists of functions can be spliced with !!!
fns <- list(
function(x) paste(x, "foo"),
\(x) paste(x, "bar")
)
fn <- compose(!!!fns)
fn("input")
#> [1] "input bar foo"
相關用法
- R purrr chuck 獲取嵌套數據結構深處的元素,如果不存在則失敗
- R purrr accumulate 累積向量縮減的中間結果
- R purrr imap 將函數應用於向量的每個元素及其索引
- R purrr list_transpose 轉置列表
- R purrr as_vector 將列表強製轉換為向量
- R purrr map_if 有條件地將函數應用於向量的每個元素
- R purrr map2 映射兩個輸入
- R purrr array-coercion 強製數組列出
- R purrr auto_browse 包裝一個函數,以便在出錯時自動 browser()
- R purrr pluck 安全地獲取或設置嵌套數據結構深處的元素
- R purrr insistently 將函數轉換為等待,然後在錯誤後重試
- R purrr map_depth 在給定深度映射/修改元素
- 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 根據元素的名稱/位置保留/丟棄元素
- R purrr keep 根據元素的值保留/丟棄元素
- R purrr transpose 轉置列表。
- R purrr flatten 將列表的列表展平為簡單的向量
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Compose multiple functions together to create a new function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。