例如讀取 20 個檔案,當然不可能寫 20 段讀取檔案的程式碼,這時需要控制流程,讓大同小異的程式碼能重複執行。
R 的幾個控制流程關鍵字:if/else,for,while,repeat,break,next,return。
## 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 = 5。else 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
}
沒有留言:
張貼留言