Я использую R для построения математической модели. Я хочу написать функцию f(a, b, g)
, которая принимает 3 аргумента, а последний — функцию. Я хочу знать, могу ли я передать функцию в качестве аргумента другой функции? Если это возможно, можете ли вы, ребята, привести простой пример?
Можем ли мы передать функцию в качестве аргумента
Ответы (2)
Безусловно, допустимо передавать функцию в качестве аргумента функции. Многие элементарные функции R делают это. Например,
tapply(..., FUN)
Вы можете проверить их по ?tapply
.
Дело в том, что вы рассматриваете только имя функции как символ. Например, в примере с игрушкой ниже:
foo1 <- function () print("this is function foo1!")
foo2 <- function () print("this is function foo2!")
test <- function (FUN) {
if (!is.function(FUN)) stop("argument FUN is not a function!")
FUN()
}
## let's have a go!
test(FUN = foo1)
test(FUN = foo2)
Также можно передать аргументы функции foo1
или foo2
в test
, используя ...
. Я оставляю это для вас, чтобы провести некоторые исследования.
Если вы знакомы с языком C, то нетрудно понять, почему это правомерно. R написан на C (хотя синтаксис его языка принадлежит языку S), поэтому по существу это достигается за счет использования указателей на функции. Если вы хотите узнать больше об этом, см. Как работают указатели функций в C. ?
person
Zheyuan Li
schedule
04.04.2016
Вот очень простой пример из текста Хэдли:
randomise <- function(f) f(runif(1e3))
randomise(mean)
#> [1] 0.5059199
randomise(mean)
#> [1] 0.5029048
randomise(sum)
#> [1] 504.245
person
stevec
schedule
03.07.2020
?optim
и?integrate
для некоторых функций R, которые принимают другие функции в качестве аргументов. - person G. Grothendieck   schedule 04.04.2016