是否可以将函数定义为R中另一个函数的参数?

时间:2012-10-23 23:29:32

标签: r statistics

例如:

method1 <- function(alpha,beta,ff)

R是否允许这个???

我努力实现的目标是:我有一个通用的方法,method1。我还有其他方法:f2,f3,f4。我希望它像method1 <- function(a,b, ff)a&amp; b是常量,最重要的是,ff可以是f2f3f4,具体取决于我在控制台上调用该函数的方式。理想情况下f2, f3, f4计算矩阵。

使用下面答案中的例子,我想知道为什么我不能这样做?

f1 <- function(a,b,ff(a,b))
{
    solve(ff(a,b))
}
f2 <- function (x,y){
    Diag(x*y)
}

这是一个非常糟糕的例子。但我想知道为什么我不能在参数中包含ff(a,b)???写作的逻辑是什么?

f1&lt; - function(a,b,ff){ FF(A,B) }

1 个答案:

答案 0 :(得分:10)

取决于你的意思。您可以将函数作为参数传递给另一个函数,并且可以将默认参数设为函数:

f <- function(a,b,f2=function(x,y) { x+y}) {
   f2(a,b)
}
f(1,2) ## 3

您可以传递函数调用的结果:

f <- function(a,b,c) { a + b + c }
f3 <- function(x,y) { x*y }
f(1,2,f3(3,4))

但你不能完全你指定的内容:必须根据标准变量命名约定命名参数(参见?make.names)。

f <- function(a,b,f2(1,3)) { ... ## error

你可以通过使用反引号或分配names(formals(f))[3] <- "f2(1,3)"来实现,但这很危险,可能不是你想要的。

function(a,b,`f2(1,3)`) { }

如果您再解释一下您正在尝试做的事情,您可能会得到更有意义的答案......

修改:根据您的描述进行猜测,您想要我上面描述的第一件事。

f1 <- function(a,b,ff) {
   ff(a,b) 
}
f2 <- function(x,y) diag(x)*y
f3 <- function(x,y) matrix(runif(x*y),nrow=x,ncol=y)
f4 <- function(x,y) outer(seq(x),seq(y))
f1(2,2,f2)
##      [,1] [,2]
## [1,]    2    0
## [2,]    0    2
f1(2,2,f3)
##             [,1]       [,2]
## [1,] 0.773723089 0.09640121
## [2,] 0.006206349 0.84351541
f1(2,2,f4)
##      [,1] [,2]
## [1,]    1    2
## [2,]    2    4