簡體   English   中英

是否可以將函數定義為R中另一個函數的參數?

[英]Is it possible to define a function as an argument of another function in R?

例如:

method1 <- function(alpha,beta,ff)

R允許這個???

我試圖實現的是:我有一個通用方法, method1 我有其他方法: f2,f3,f4 我希望它像method1 <- function(a,b, ff) ,其中ab是常量,最重要的是, 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 < - function(a,b,ff){ff(a,b)}

取決於你的意思。 您可以將函數作為參數傳遞給另一個函數,並且可以將默認參數設為函數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM