[英]How to pass a parameter to purrr's map function without using formula notation?
[英]R: Use formula notation to define a function, like purrr::map(.f=)
在gtsummary package中,有很多函數取其他函數為arguments。 目前,用戶必須傳遞正確的 function,但我想更新以允許用戶使用公式語法傳遞具有快捷符號的函數(類似於purrr::map()
允許用戶傳遞purrr::map(.f = mean)
或purrr::map(.f = ~mean(.x))
。整個 tidyverse 中還有其他函數,例如,在 dplyr 中使用類似的符號。這是purrr::map()
的描述幫助文件:
我寫了一個小的 function 將公式語法轉換為新的 function。 但是,這只接受點符號(例如~mean(.)
)。 我如何將其概括為接受.
、 .x
和..1
? 在我的用例中,我需要使用foo(1:5)
調用它們(不引用參數名稱),並且 function 將只有一個參數。
# convert a formula to a function
formula_to_function <- function(x) {
function(.) eval(rlang::f_rhs(x), list(.))
}
# create a new function that is the mean of a vector
foo <- formula_to_function(~mean(., na.rm= TRUE))
# evaluate function
foo(1:5)
#> [1] 3
由代表 package (v0.3.0) 於 2020 年 7 月 3 日創建
謝謝!
gsubfn 中的match.funfn
類似於基礎 R 中的match.fun
,除了它也接受一個公式。 該公式可以使用任何變量,並且任何自由變量(使用但未定義)都假定為 arguments 遇到的順序。
library(gsubfn)
f <- function(x, y, z, fun) {
fun <- match.funfn(fun)
fun(x, y, z)
}
# test
f(1, 2, 3, ~ a + b + c)
## [1] 6
或者,您可以在公式的 LHS 上指定 arguments
# same
f(1, 2, 3, a + b + c ~ a + b + c)
## [1] 6
或通過 function
# same
f(1, 2, 3, function(a, b, c) a + b + c)
## [1] 6
還有其他功能,請參閱 gsubfn package 文檔了解更多信息。
也可以通過使用fn$
調用的 function 將公式作為 function arguments 傳遞給一般函數。
library(gsubfn)
f2 <- function(x, y, z, fun) {
fun(x, y, z)
}
fn$f2(1, 2, 3, ~ a + b + c)
## [1] 6
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.