2014/12/22

[R] 第9篇 控制流程 (上)

當程式需要重複處理執行一樣的工作時,就需要控制流程來協助。
例如讀取 20 個檔案,當然不可能寫 20 段讀取檔案的程式碼,這時需要控制流程,讓大同小異的程式碼能重複執行。
R 的幾個控制流程關鍵字:if/elseforwhilerepeatbreaknextreturn
## case 1
if(a > 3) {
    b = 0
}
else {
    b = 10
}
## a > 3, b = 0; a <= 3, b = 10

## case 2
if(a > 3) {
    b = 0
}
else if(a < 10) {
    b = 5
}
else {
    b = 10
}
## a > 3, b = 0; a <= 3, b = 5
case 1 以 a 是否大於 3 來作分界,如果大於 3 那麼 b 就是 0,如果小於等於 3,b 就是 10。
case 2 不會有 b = 10 的情況,因為會落到 else if 時,表示 a <= 3,那麼就一定符合 a < 10,所以 b = 5else if 是不符合上一個 if 條件時,才會再作判斷,else 是全部條件皆不符合。另外,else 不一定需要,視情況而定。
case 1 也可以這樣寫,簡便。
## case 1
b <- if(a > 3) {
    0
}
else {
    10
}
for 是在某個範圍內,連續執行一樣動作數次。for 裡面可以再放 for,如果印出 matrix 的全部元素,這時需要兩個 for 串起來,來完成這件事。
## case 1
for(x in 2:5) {
    print(x)
}
## result: 2 3 4 5

## case 2
y <- c("a", "b", "c", "d")
for(letter in y) {
    print(letter)
}
## result: "a" "b" "c" "d"

## case 3
x <- matrix(1:6, 2, 3)
for(i in 1:nrow(x)) {
    for(j in 1:ncol(x)) {
        print(x[i, j])
    }
}
## result: 1 3 5 2 4 6
x
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
while 是當條件不符合時,就不會繼續執行,而每次執行後必須自己改變控制變數。如果沒有每次作 +1 的動作,會變成無限的迴圈。
c <- 0
while(c <= 3) {
    print(c)
    c <- c + 1
}

沒有留言:

張貼留言