例如:
method1 <- function(alpha,beta,ff)
R是否允许这个???
我努力实现的目标是:我有一个通用的方法,method1
。我还有其他方法:f2,f3,f4
。我希望它像method1 <- function(a,b, ff)
,a
&amp; b
是常量,最重要的是,ff
可以是f2
或f3
或f4
,具体取决于我在控制台上调用该函数的方式。理想情况下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) }
答案 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