你的例子不是關於匿名函數。它大約是{
和}
,如果它們之間只有一個表達式,則不需要它們。
- 表達式可能比一行更長。
- 在一行中可以有多個表達式(用分號分隔)。
- 匿名函數不限於一行。
您可以找到文檔{
像往常一樣:help('{')
例子:
x <- 3; y <- 4; z <- x + y # more than one expression on a line
z <- x +
y +
2 # the expression x+y+2 extends over three lines
x <- matrix(1:30,3)
apply(x, 1, function(x) sd(x)/
median(x)) # anonymous function definition on two lines
有時候一個人要小心代碼換行符。在某些情況下,他們被解釋者認爲是句法單位的結尾。在這種情況下「小心」的意思是:
給翻譯一個理由在下一行搜索。
這是行不通的:
x <- 11:15
x
[3] # because of the linebreak it is not x[3]
但是,這將做到:
x[
3
]
# the interpreter was searching for the ']' (till it was found)
這是我吸取了教訓的情況:
if (...) { ... }
else { ... } # unexpected 'else' !!!
從那時起我這樣編碼:
if (...) {
...
} else {
...
}
請參閱Unexpected 'else' in "else" error
A 非匿名函數(即,命名函數)比通過分配與對象名連接的功能定義沒有別的:以備後用
fname <- function(...) ...
。你甚至可以做到這一點的地方,通常是一個匿名函數,可以發現:
x <- matrix(1:30,3)
apply(x, 1, FUN=(mysuperfunc <- function(x) sd(x)/median(x)))
但這是更好的可讀性是一樣的:
mysuperfunc <- function(x) sd(x)/median(x)
x <- matrix(1:30,3)
apply(x, 1, FUN=mysuperfunc)
@jogo你是對的,謝謝你指點一下out - 在編輯中修復 – Chill2Macht
關於「是否有可能」,您可以嘗試一下。例如,'y = {x = 1; x + 2}'的作品,你可以通過實驗來弄清楚。正如jogo所說,花括號包裝了一個表達式,並且恰好在函數中很有用。 – Frank
@jogo,請張貼的答案... –