【发布时间】:2015-02-10 09:37:29
【问题描述】:
一般问题: 我有一个函数,它接受另一个函数作为参数,形式为:
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。但我可能希望保留 a 的灵活性,这样,在不定义许多不同功能的情况下,我可以快速绘制 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))
但这些都不起作用。有没有人有办法解决吗? (我可以在f2 中为a 设置默认值,但是我无法使用不同的a 值运行它。
具体上下文:
我有一个函数,它将找到一个函数的逆拉普拉斯变换,将一个函数作为它的参数,该函数预期有一个参数(拉普拉斯变量,p)。我可以反转上面f1 之类的函数。但我正在尝试反转地下水中污染物运输的功能。这个过程取决于许多其他参数,例如水流速度和行进距离。所以我希望能够传递一个用于拉普拉斯反演的多参数函数,使得除了拉普拉斯参数 p 之外的所有参数都是固定的。最终,我想使用不同的速度值等多次执行此过程,因此我需要一种流畅的方式来更改正在使用的“固定”参数。
提前感谢您的帮助, 克里斯托弗
【问题讨论】:
-
看看
?dotsMethods和?do.call。将两者结合起来应该会给你一个解决方案。 -
用省略号
F <- function(x, FUN, ...){FUN(x, ...)}; F(-5:5, f2, a=4)怎么样? -
咖喱是要走的路。