有的時(shí)候,我們可能需要多次執(zhí)行同一塊代碼。一般情況下,語句是按順序執(zhí)行的:函數(shù)中的第一個(gè)語句先執(zhí)行,接著是第二個(gè)語句,依此類推。
編程語言提供了更為復(fù)雜執(zhí)行路徑的多種控制結(jié)構(gòu)。
循環(huán)語句允許我們多次執(zhí)行一個(gè)語句或語句組,下面是大多數(shù)編程語言中循環(huán)語句的流程圖:
R 語言提供的循環(huán)類型有:
repeat 循環(huán)
while 循環(huán)
for 循環(huán)
R 語言提供的循環(huán)控制語句有:
break 語句
Next 語句
循環(huán)控制語句改變你代碼的執(zhí)行順序,通過它你可以實(shí)現(xiàn)代碼的跳轉(zhuǎn)。
repeat 循環(huán)會(huì)一直執(zhí)行代碼,直到條件語句為 false 時(shí)才退出循環(huán),退出要使用到 break 語句。
語法格式如下:
repeat { // 相關(guān)代碼 if(condition) { break } }
以下示例在變量 cnt 為 5 時(shí)退出循環(huán),cnt 為計(jì)數(shù)變量:
v , cnt v cnt cnt cnt
執(zhí)行以上代碼,輸入結(jié)果為:
[1] "Google" "Nhooo" [1] "Google" "Nhooo" [1] "Google" "Nhooo" [1] "Google" "Nhooo"
只要給定的條件為 true,R 語言中的 while 循環(huán)語句會(huì)重復(fù)執(zhí)行一個(gè)目標(biāo)語句。
語法格式如下:
while(condition) { statement(s); }
在這里,statement(s) 可以是一個(gè)單獨(dú)的語句,也可以是幾個(gè)語句組成的代碼塊。
condition 可以是任意的表達(dá)式,當(dāng)為任意非零值時(shí)都為 true。當(dāng)條件為 true 時(shí)執(zhí)行循環(huán)。 當(dāng)條件為 false 時(shí),退出循環(huán),程序流將繼續(xù)執(zhí)行緊接著循環(huán)的下一條語句。
以下示例在在變量 cnt 小于 7 時(shí)輸出 while 語句塊中的內(nèi)容,cnt 為計(jì)數(shù)變量:
v , cnt cnt v cnt cnt
執(zhí)行以上代碼,輸入結(jié)果為:
[1] "Google" "Nhooo" [1] "Google" "Nhooo" [1] "Google" "Nhooo" [1] "Google" "Nhooo" [1] "Google" "Nhooo"
R 編程語言中 for 循環(huán)語句可以重復(fù)執(zhí)行指定語句,重復(fù)次數(shù)可在 for 語句中控制。
語法格式如下:
for (value in vector) { statements }
R 語言的 for 循環(huán)特別靈活,不僅可以循環(huán)整數(shù)變量,還可以對(duì)字符向量,邏輯向量,列表等數(shù)據(jù)類型進(jìn)行迭代。
以下示例輸出 26 個(gè)字母對(duì)前面四個(gè)字母:
v i v i
執(zhí)行以上代碼,輸入結(jié)果為:
[1] "A" [1] "B" [1] "C" [1] "D"
R 語言的 break 語句插入在循環(huán)體中,用于退出當(dāng)前循環(huán)或語句,并開始腳本執(zhí)行緊接著的語句。
如果你使用循環(huán)嵌套,break 語句將停止最內(nèi)層循環(huán)的執(zhí)行,并開始執(zhí)行的外層的循環(huán)語句。
break 也常用語 switch 語句中。
語法格式如下:
break
以下示例在 變量 cnt 為 5 時(shí)使用 break 退出循環(huán),cnt 為計(jì)數(shù)變量:
v <- c("Google","Nhooo") cnt <- 2 repeat { print(v) cnt <- cnt+1 if(cnt > 5) { break } }
執(zhí)行以上代碼,輸入結(jié)果為:
[1] "Google" "Nhooo" [1] "Google" "Nhooo" [1] "Google" "Nhooo" [1] "Google" "Nhooo"
next 語句用于跳過當(dāng)前循環(huán),開始下一次循環(huán)(類似其他語言的 continue)。
語法格式如下:
next
以下示例輸出 26 個(gè)字母的前面 6 個(gè)字母,在字母為 D 的時(shí)候跳過當(dāng)前的循環(huán),進(jìn)行下一次循環(huán):
v i v i i
執(zhí)行以上代碼,輸入結(jié)果為:
[1] "A" [1] "B" [1] "C" [1] "E" [1] "F"