2016-04-04 123 views
-2

我使用R來構建數學模型。我想寫一個函數f(a, b, g),它需要3個參數,最後一個是函數。我想知道我是否可以將一個函數作爲參數傳遞給另一個函數?如果這是可能的,你們能給我一個簡單的例子嗎?謝謝。R語言,我們是否可以傳遞一個函數作爲參數

+1

功能? http://adv-r.had.co.nz/Functionals.html – Laterow

+0

是的。對於接受其他函數作爲參數的一些R函數,請參閱'?optim'和'?integrate'的Examples部分。 –

回答

5

將函數傳遞給函數參數當然是合法的。許多基本的R函數都這樣做。例如,

tapply(..., FUN) 

您可以通過?tapply來檢查它們。

事情是,你只把這個函數的名字當作符號來對待。例如,在下面的玩具例如:

foo1 <- function() print("this is function foo1!") 
foo2 <- function() print("this is function foo2!") 

test <- function (FUN) { 
    if (!is.function(FUN)) stop("argument FUN is not a function!") 
    FUN() 
    } 

## let's have a go! 
test(FUN = foo1) 
test(FUN = foo2) 

它也可以的foo1foo2函數參數傳遞給test,通過使用...。我留下這個讓你有一些研究。


如果您熟悉C語言,那麼不難理解爲什麼這是合法的。 R是用C編寫的(儘管它的語言語法屬於S語言),所以基本上這是通過使用指向函數的指針來實現的。如果您想了解更多信息,請參閱How do function pointers in C work?

相關問題