當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R Control 控製流


R語言 Control 位於 base 包(package)。

說明

這些是基本的 control-flow 結構R語言。它們的函數與任何 Algol-like 語言中的控製語句大致相同。他們都是預訂的字。

用法

if(cond) expr
if(cond) cons.expr  else  alt.expr

for(var in seq) expr
while(cond) expr
repeat expr
break
next

參數

cond

不是 NA 的長度為 1 的邏輯向量。如果可能的話,其他類型被強製為邏輯類型,忽略任何類。 (長度大於 1 的條件是錯誤的。)

var

變量的語法名稱。

seq

計算結果為向量(包括列表和 expression )或 pairlistNULL 的表達式。因子值將被強製轉換為字符向量。這可以是一個長向量。

expr , cons.expr , alt.expr

正式意義上的表達。這可以是簡單表達式,也可以是所謂的複合表達式,通常采用 { expr1 ; expr2 } 形式。

細節

break 跳出 forwhilerepeat 循環;控製權轉移到最內層循環之外的第一條語句。 next 停止當前迭代的處理並推進循環索引。 breaknext 均僅適用於最內層的嵌套循環。

請注意,忘記在語句周圍放置大括號 ( { .. } ) 是一個常見的錯誤,例如在 if(..)for(....) 之後。特別是, }else 之間不應有換行符,以避免在鍵盤或通過 source 輸入 if ... else 構造時出現語法錯誤。因此,防禦性編程的一種(有點極端)態度是始終使用大括號,例如,對於 if 子句。

for 循環中的 seq 在循環開始時計算;隨後更改它不會影響循環。如果seq 的長度為零,則跳過循環體。否則,變量 var 依次分配 seq 的每個元素的值。您可以在循環體內分配給var,但這不會影響下一次迭代。當循環終止時,var 仍保留為包含其最新值的變量。

if 返回所計算表達式的值,如果沒有,則 NULL 不可見(如果沒有 else 則可能會發生這種情況)。

forwhilerepeat 不可見地返回 NULLforvar 設置為 seq 最後使用的元素,如果長度為零,則設置為 NULL

breaknext 在循環內轉移控製時不返回值。

例子

for(i in 1:5) print(1:i)
for(n in c(2,5,10,20,50)) {
   x <- stats::rnorm(n)
   cat(n, ": ", sum(x^2), "\n", sep = "")
}
f <- factor(sample(letters[1:5], 10, replace = TRUE))
for(i in unique(f)) print(i)

參考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

Syntax對於基本的R語法和運算符,Paren用於括號和大括號。

ifelse , switch 用於其他控製流量的方式。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Control Flow。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。