我明白「function(x)」是如何工作的,但在這裏「function()」的作用是什麼?如果函數(x)可以工作,爲什麼我們需要函數()?
z <- function() {
y <- 2
function(x) {
x + y
}
}
我明白「function(x)」是如何工作的,但在這裏「function()」的作用是什麼?如果函數(x)可以工作,爲什麼我們需要函數()?
z <- function() {
y <- 2
function(x) {
x + y
}
}
function
是一個關鍵字是創建一個功能的一部分(在編程意義上Gilles describes in his answer)。其他部分是參數列表(括號內)和函數體(花括號)。
在你的例子中,z
是一個不帶參數的函數。它返回一個帶有1個參數的函數(名字爲x
)(因爲R默認返回最後一個評估語句作爲返回值)。該函數返回它的參數x
加2
當z
被調用(不帶參數:z()
)它分配2 y
(函數內部變量的作用域,那我不打算進入一個額外的概念)。然後它創建一個函數(沒有名字),它帶有一個名爲x
的參數,當它自己調用時,它返回參數x
加上2.該匿名函數從調用返回到z
,並且可能被存儲以便它可以存儲稍後調用。
請參閱https://github.com/hadley/devtools/wiki/Functions和https://github.com/hadley/devtools/wiki/Functionals以獲取關於傳遞函數作爲對象的更多討論。
感謝您的解釋和理解我的問題。 – 2013-02-14 21:15:18
因此,第3行和第5行應該與第2行縮進一樣,對嗎? – Scott 2013-02-14 21:18:15
@Scott是的,他們應該。 – 2013-02-14 21:19:19
「功能」一詞在mathematics和programming中的含義有所不同。在數學中,函數是參數的每個可能值與結果之間的對應關係。在編程中,函數是一系列指令來計算參數的結果。
在數學中,沒有參數的函數是常量。在編程中,情況並非如此,因爲函數可以有side effects,如打印內容。所以你會遇到很多沒有參數的函數。
Hre函數function(x) { x + y }
取決於變量y
。沒有副作用,所以這個函數非常類似於由$ f(x)= x + y $定義的數學函數。但是,這個定義僅適用於給定值y
。先前的指令集y
爲2,所以
function() {
y <- 2
function(x) {
x + y
}
}
相當於
function() {
function(x) {
x + 2
}
}
在這個意義上,當施加到相同的值兩個定義產生相同的結果。但是,它們的計算方式略有不同。
該功能被命名爲z
。當你打電話給z
(沒有參數,所以你寫z()
)時,它建立了函數function (x) { x + 2 }
,或者其他的東西:z()
是一個參數的函數,它的參數加2。所以你可以寫一些像z()(3)
- 結果是5.
這顯然是一個玩具的例子。隨着你在講座中的進展,你會看到越來越複雜的例子,其中這種功能構建與其他功能混合在一起以實現有用的功能。
最後一段之前的段落真的很有幫助;非常感謝! – 2013-02-14 21:33:11
With some help我已經挑出了一些沒有正式參數的函數示例來幫助您理解爲什麼它們可能有用。
函數具有副作用
plot.new()
例如,初始化一個圖形設備。flush.console()
有你的背影。功能,這有一個狹窄的目的
這可能是多數人的案件。
date()
。getRversion()
。
你的問題確實不清楚。我懷疑我看到有什麼困擾你,但我不確定。 [本頁](http://www.macs.hw.ac.uk/~pjbk/pathways/cpp1/node160.html)可能會有幫助,但它是關於不同的編程語言。編程語言中的函數並不像數學函數那樣:它更像是一個指令列表,當您將函數應用於可能爲空的**參數列表時,它會執行某些操作。 – Gilles 2013-02-14 21:07:38
這很好;我的導師也無法解釋他的東西。 – 2013-02-14 21:12:16