R: передать функцию многих параметров как один из одного параметра в другую функцию, установив другие параметры

Общая проблема: у меня есть функция, которая принимает другую функцию в качестве аргумента в форме:

F <- function(x, FUN){FUN(x)}

Я мог бы легко передать ему простую функцию:

f1 <- function(x){plot(x, 1/x)}
F(-5:5, f1)

будет отображать график 1/ х.

Предположим, у меня была другая, более сложная функция:

f2 <- function(x, a){plot(x, 1/x^a)}

f2 имеет 2 аргумента, поэтому не может быть передан напрямую F, Но я мог бы сохранить гибкость, чтобы без определения множества различных функций я мог быстро построить график 1/x^a за любую ценность, которую я себе представляю. Я пытался, для a = 2:

F(-5:5, f2(, 2))
F(-5:5, f2(, a=2))
F(-5:5, f2(x, 2))
F(-5:5, f2(a=2))

Но ничего из этого не работает. у кого-нибудь есть решение? (Я мог бы установить значение по умолчанию для a в f2, но тогда я не смог запустить его с другим значением a).

Конкретный контекст: у меня есть функция, которая найдет обратное преобразование Лапласа функции, взяв функцию в качестве аргумента, который, как ожидается, будет иметь один аргумент (переменная Лапласа, p). Я могу инвертировать функцию как f1 выше. Но я пытаюсь изменить функцию переноса загрязнений в подземных водах. Этот процесс зависит от множества других параметров, таких как скорость воды и пройденное расстояние. Поэтому я хотел бы иметь возможность передать многопараметрическую функцию для инверсии Лапласа таким образом, чтобы все параметры, кроме параметра Лапласа, были фиксированными. В конечном итоге я хотел бы выполнить этот процесс много раз с разными значениями скорости и т. Д., Поэтому мне нужен плавный способ изменения используемых "фиксированных" параметров.

Заранее спасибо за любую помощь, Кристофер

1 ответ

Решение

Просто определите генератор функции:

genFunc = function(a)
{
    function(x) plot(x, 1/x^a)
}

F(-5:5, genFunc(2))

Или использовать Curry от functional пакет, чтобы установить параметры, которые вы хотите, и приправить ваши блюда:

library(functional)
F(-5:5, Curry(f2, a=2))
Другие вопросы по тегам