2

例如:

method1 <- function(alpha,beta,ff)

R允许吗???

我试图实现的是:我有一个通用的方法,method1. 我还有其他方法:f2,f3,f4. 我希望它像method1 <- function(a,b, ff),其中a&b是常量,最重要的是,ff可以是f2orf3f4,具体取决于我在控制台上调用函数的方式。理想情况下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 <- 函数(a,b,ff){ ff(a,b) }

4

1 回答 1

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
于 2012-10-23T23:31:40.877 回答