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))