2013-01-13 75 views
2

我注意到,在某些情況下(我仍然是R的初學者),多行指令不能按原樣合併爲簡單行指令。我們舉一個例子,這是我最近在線上的一個教訓:R控制檯:單行指令vs多行指令

> make.power <- function(n) { 
+  pow <- function(x) { 
+   x^n 
+   } 
+   pow 
+  } 

是否是'make.power'函數的定義。然後,我可以定義「立方體」或廣場功能

> cube <- make.power(3) 
> square <- make.power(2) 

然後,如果我嘗試與完全同樣的語法一行定義make.power:

> make.power <- function(n) { pow <- function(x) { x^n } pow } 

這將提高。一個make.power ......‘「在意外的符號’,這說的下面一行的代碼將工作:

> make.power <- function(n) { pow <- function(x) { x^n }} 

,當切換到多行,仍然可以工作

> make.power <- function(n) { 
+  pow <- function(x) { 
+   x^n 
+   } 
+  } 

我必須承認我很困惑。我的問題如下:

  1. 爲什麼我不能將多行代碼合併到單行指令中?
  2. 在函數的第一個多行定義中,爲什麼一個 在定義函數後立即回想'pow'函數,其中 顯然沒有興趣,因爲沒有召回 的相同代碼是可以的!

編輯:下面#Dwin的答案,這是真的,下面的表達式:

> make.power <- function(n) { pow <- function(x) { x^n }; pow } 

完美。這個也是如此:

> make.power <- function(n){; pow <- function(x) {; x^n }; pow } 

因此,似乎「;」可能在某些情況下是強制性的(這裏是在「}」和「pow」之間),而在其他情況下(在「{」和「pow」之間)是強制性的?

回答

8

回車(或換行符) (我早些時候說過它將表達式分開,但是在R中並不是真正正確的術語,R中的表達式實際上是用逗號分開的。)如果你在一行中插入一個分號,你會得到。同樣的效果儘管有必要,這個代碼仍然可以作爲這一事實的例子:

make.power <- function(n) { pow <- function(x) { x^n }; pow } 

我很失望,我無法找到這個表述爲這樣在任何help()文件,我看了一下我認爲通過輸入?Syntax我應該找到相關的東西。我能想到的最好的是help(parse)頁面,甚至在那裏,只有通過觀察這個例子,你是否能夠推斷出這一點。我想你應該已經閱讀了「Intro to R」,我確信它必須被描述。是的,它在1.8節。

迴應Q2:在賦值爲「pow」的內部函數(...)的「< - 」過程中,返回給外部函數調用的值只是未命名的函數,而不是任何東西那個名字叫做「pow」。我對你的第一條評論發表評論意見。這可能比你從「Intro to R」得到的預期更加微妙。有時需要return函數時,只有一部分對象的分配是最後一個命令,但在這種情況下,最緊湊的代碼將是:

make.power <- function(n) { function(x) { x^n } } 
+0

謝謝。我更新了我的問題,經過一些其他測試後,似乎根據具體情況使用半列符號是必需的或可選的。我們是否同意這樣的事實,即在原始教學中,第二個「戰俘」符號沒有任何利益? –

+0

是的。我們同意。而且,第一個也沒有效果。 –

+0

我的確猜測我確實已經閱讀了「Intro to R」的第1.8節...... mea culpa! –