2016-04-04 6 views
-2

Я использую R для построения математической модели. Я хочу написать функцию f(a, b, g), которая принимает 3 аргумента, а последняя - это функция. Я хочу знать, могу ли я передать функцию в качестве аргумента другой функции? Если это возможно, можете ли вы, ребята, дать мне простой пример? Благодарю.R-язык, можем ли мы передать функцию в качестве аргумента

+1

Функционалы? http://adv-r.had.co.nz/Functionals.html – Laterow

+0

Да. См. Раздел «Оптимизация» и «интегрировать» в разделе «Примеры» для некоторых R-функций, которые принимают другие функции в качестве аргументов. –

ответ

5

Конечно, законно передавать функцию аргумент функции. Многие элементарные функции 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-языку), поэтому по существу это достигается с помощью указателей для работы. Если вы хотите узнать больше об этом, см. How do function pointers in C work?

Смежные вопросы