R:通过设置其他参数,将许多参数的功能作为一个参数之一传递给另一个功能

时间:2015-02-10 09:37:29

标签: r function arguments

一般问题: 我有一个函数,它将另一个函数作为参数,形式为:

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之外的所有参数都是固定的。最后我想用不同的速度值等多次进行这个过程,所以我需要一种流畅的方式来改变所使用的“固定”参数。

提前感谢您的帮助, 克里斯托弗

1 个答案:

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