R語言-循環語句

for (n in x) {expr}
R中最基本的是for循環,其中n爲循環變量,x通常是一個序列。n在每次循環時從x中順序取值,代入到後面的expr語句中進行運算。下面的例子即是以for循環計算30個Fibonacci數。
x <- c(1,1)
for (i in 3:30) {
    x <- x[i-1]+x[i-2]
}

while (condition) {expr}
當不能確定循環次數時,我們需要用while循環語句。在condition條件爲真時,執行大括號內的expr語句。下面即是以while循環來計算30個Fibonacci數。
x <- c(1,1)
i <- 3
while (i <= 30) {
    x <- x[i-1]+x[i-2]
    i <- i +1
}



條件
if (conditon) {expr1} else {expr2}
if語句用來進行條件控制,以執行不同的語句。若condition條件爲真,則執行expr1,否則執行expr2。ifesle()函數也能以簡潔的方式構成條件語句。下面的一個簡單的例子是要找出100以內的質數。
x <- 1:100
y <- rep(T,100)
for (i in 3:100) {
    if (all(i%%(2:(i-1))!=0)){
        y <- TRUE
        } else {y <- FALSE
                }
}
print(x[y])

在上面例子裏,all()函數的作用是判斷一個邏輯序列是否全爲真,%%的作用是返回餘數。在if/else語句中一個容易出現的錯誤就是else沒有放在}的後面,若你執行下面的示例就會出現錯誤。
logic = 3
x<- c(2,3)
if (logic == 2){
    y <- x^2
}
else {
  y<-x^3
}
show(y)

一個例子
本例來自於"introduction to Scientific Programming and Simulatoin Using R"一書的習題。有這樣一種賭博遊戲,賭客首先將兩個骰子隨機拋擲第一次,如果點數和出現7或11,則贏得遊戲,遊戲結束。如果沒有出現7或11,賭客繼續拋擲,如果點數與第一次扔的點數一樣,則贏得遊戲,遊戲結束,如果點數爲7或11則輸掉遊戲,遊戲結束。如果出現其它情況,則繼續拋擲,直到贏或者輸。用R編程來計算賭客贏的概率,以決定是否應該參加這個遊戲。

craps <- function() {
    #returns TRUE if you win, FALSE otherwise
    initial.roll <- sum(sample(1:6,2,replace=T))
    if (initial.roll == 7 || initial.roll == 11) return(TRUE)
    while (TRUE) {
        current.roll <- sum(sample(1:6,2,replace=T))
        if (current.roll == 7 || current.roll == 11) {
            return(FALSE)
        } else if (current.roll == initial.roll) {
            return(TRUE)
        }
    }
}
mean(replicate(10000, craps()))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章