Вот несколько альтернатив:
1) определить анонимную функцию
# test data
fun2 <- function(x, y) x + y
fun1 <- function(fun, x) fun(x)
fun1(function(x) fun2(x, y = 2), 1)
## [1] 3
2) частичное в пакете purrr
library(purrr)
fun1(partial(fun2, y = 2), 1)
## [1] 3
3) Карри в функциональном пакете
library(functional)
fun1(Curry(fun2, y = 2), 1)
## [1] 3
4)% <% в пакете карри </strong>
Этот пакет определяет%<%
оператор для выполнения каррирования:
library(curry)
library(magrittr)
fun2 %<% 2 %>% fun1(1)
## [1] 3
5) пакет по умолчанию Этот пакет позволяет установить аргументы функции по умолчанию.
library(default)
default(fun2) <- list(y = 2)
fun1(fun2, 1)
## [1] 3
fun2 <- reset_default(fun2)
6) точки В некоторых случаях функция, которой передается другая функция, имеет аргумент ...
, который может предоставлять аргументы переданной функции. Например, здесь мы передаем a=1
в obj
через аргумент точек optimize
.
obj <- function(x, a) (x - a)^2
optimize(obj, c(0, 10), a = 1)
## $minimum
## [1] 1
##
## $objective
## [1] 4.437343e-31