一般问题: 我有一个函数,它将另一个函数作为参数,形式为:
F <- function(x, FUN){FUN(x)}
我可以轻松地将一个简单的函数传递给它:
f1 <- function(x){plot(x, 1/x)}
F(-5:5, f1)
会显示1 / x的图。
假设我有另一个更复杂的功能:
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
这样的函数。但我试图改变地下水中污染物运输的功能。该过程取决于许多其他参数,例如水流速度和行进距离。所以我希望能够通过拉普拉斯反演的多参数函数传递,使得除拉普拉斯参数p之外的所有参数都是固定的。最后我想用不同的速度值等多次进行这个过程,所以我需要一种流畅的方式来改变所使用的“固定”参数。
提前感谢您的帮助, 克里斯托弗
答案 0 :(得分:3)
只需定义一个函数生成器:
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))