Các từ dùng để chỉ “vòng lặp”: “looping”, “cycling” và “iterating”

Vòng lặp for

Lặp lại công việc với từng phần tử của một tập hợp

In các số nguyên từ 1 tới 5

for (i in 1:5) print(i)
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5

Gọi các phần tử của vector bằng số index

trai_cay <- c("cam", "xoai", "quyt", "na")

for (i in 1:length(trai_cay)) {
    print(trai_cay[i])
}
## [1] "cam"
## [1] "xoai"
## [1] "quyt"
## [1] "na"

…hoặc gọi đích danh :))

trai_cay <- c("cam", "xoai", "quyt", "na")

for (trai in trai_cay) {
    print(trai)
}
## [1] "cam"
## [1] "xoai"
## [1] "quyt"
## [1] "na"

Vòng lặp lồng trong vòng lặp (nested loop)

# chỉ dùng để minh hoạ, vẫn có cách khác tiện hơn
nucleotides <- c("A", "C", "G", "T")

for (first_nt in nucleotides) {
    for (second_nt in nucleotides) {
        for (third_nt in nucleotides) {
            print(paste(first_nt, second_nt, third_nt, sep = ""))
        }
    }
}
## [1] "AAA"
## [1] "AAC"
## [1] "AAG"
## [1] "AAT"
## [1] "ACA"
## [1] "ACC"
## [1] "ACG"
## [1] "ACT"
## [1] "AGA"
## [1] "AGC"
## [1] "AGG"
## [1] "AGT"
## [1] "ATA"
## [1] "ATC"
## [1] "ATG"
## [1] "ATT"
## [1] "CAA"
## [1] "CAC"
## [1] "CAG"
## [1] "CAT"
## [1] "CCA"
## [1] "CCC"
## [1] "CCG"
## [1] "CCT"
## [1] "CGA"
## [1] "CGC"
## [1] "CGG"
## [1] "CGT"
## [1] "CTA"
## [1] "CTC"
## [1] "CTG"
## [1] "CTT"
## [1] "GAA"
## [1] "GAC"
## [1] "GAG"
## [1] "GAT"
## [1] "GCA"
## [1] "GCC"
## [1] "GCG"
## [1] "GCT"
## [1] "GGA"
## [1] "GGC"
## [1] "GGG"
## [1] "GGT"
## [1] "GTA"
## [1] "GTC"
## [1] "GTG"
## [1] "GTT"
## [1] "TAA"
## [1] "TAC"
## [1] "TAG"
## [1] "TAT"
## [1] "TCA"
## [1] "TCC"
## [1] "TCG"
## [1] "TCT"
## [1] "TGA"
## [1] "TGC"
## [1] "TGG"
## [1] "TGT"
## [1] "TTA"
## [1] "TTC"
## [1] "TTG"
## [1] "TTT"

Vòng lặp while

Vòng lặp while tiếp tục chạy khi điều kiện vẫn còn đúng.

count <- 0

while (count < 6){
    print(count)
    count <- count + 1
}
## [1] 0
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5

Vòng lặp repeat

Vòng lặp repeat dừng khi tín hiệu dừng được thoã mãn

i <- 0

repeat{
    i <- i + 1
    print(i)
    if (i>5) break
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6

Biến đếm (counter)

Biến đếm được dùng rất phổ biến trong các vòng lặp.

Biến đếm phải được khai báo TRƯỚC khi bắt đầu vòng lặp.

count <- 0

while (count < 6){
    print(count)
    count <- count + 1
}
while (z < 6){
    print(z)
    z <- z + 1
}
## Error in eval(expr, envir, enclos): object 'z' not found

Đừng quên breaknext

Một “vòng lặp” có nhiều “lần lặp”.

break: thoát hẵn khỏi VÒNG lặp, thực hiện các lệnh tiếp theo.

for (i in 1:6){
    if (i == 4){
        break
    }
    print(i)
}
## [1] 1
## [1] 2
## [1] 3

next: thoát khỏi lần LẦN lặp hiện tại, đi tới lần lặp kế tiếp nhưng KHÔNG thoát khỏi VÒNG lặp.

for (i in 1:6){
    if (i == 4){
        next
    }
    print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 5
## [1] 6