2013-07-19 5 views
3

Предположим, я хочу интегрировать некоторую функцию, которая включает в себя суммы и продукты нескольких других пользовательских функций. Давайте рассмотрим чрезвычайно простой пример, который дает ту же ошибку.R: как передать функции в качестве аргументов другой функции

integrate(f = sin + cos, lower=0, upper=1) 

Это дает «Ошибка в грехе + соз: нечисловой аргумент для бинарного оператора», который я думаю, что говорит, что не имеет смысла, чтобы просто добавить функции вместе, не передавая им какой-то аргумент. Поэтому я немного застрял здесь. This thread создает то, что я думаю, является решением более сложного вопроса, который может быть применен здесь, но в этом случае для такой простой задачи это выглядит долго. Я действительно удивлен, что не могу найти аргументы аргументов функции в справочном руководстве, поэтому я думаю, что не использую правильную терминологию.

ответ

7

Просто написать свою собственную функцию:

> integrate(f = function(x) sin(x) + cos(x), lower=0, upper=1) 
1.301169 with absolute error < 1.4e-14 

В этом примере я использовал анонимную функцию, но это не обязательно. Ключ должен написать функцию, которая представляет любую функцию, которую вы хотите интегрировать. В этом случае функция должна принимать векторный вход и добавлять sin и cos для каждого элемента.

Эквивалентно, мы могли бы сделать:

foo <- function(x){ 
    sin(x) + cos(x) 
} 
integrate(f = foo, lower=0, upper=1) 
+2

То есть, что вы хотите добавить вместе (математически), является результатом функции ('sin (х) и' соз (х) '), а не сами функции. –

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