+ - 0:00:00
Notes for current slide
Notes for next slide

Các lệnh if, else, for, while


Khóa học: Hướng dẫn sử dụng R để xử lý dữ liệu

Biên soạn: Duc Nguyen - www.tuhocr.com (Tự học R chấm com)

Đăng ký: tuhocr.com@gmail.com

1 / 15

Control structure

Các lệnh if, else, for, while, ... giúp xử lý dữ liệu theo điều kiện.

2 / 15

Control structure

Các lệnh này áp dụng khi xây dựng hàm (function) trong R.

  • if, else: Thực hiện theo điều kiện

  • for: Thực hiện vòng lặp trong một số lần nhất định

  • while: Thực hiện vòng lặp theo điều kiện

  • repeat: Thực hiện vòng lặp vô hạn

  • break: Ngưng vòng lặp

  • next: Chuyển qua điều kiện khác

  • return: Thoát khỏi điều kiện

3 / 15

Lệnh if

if(<condition>) {
# do something
}
else {
# do something else
}
if(<condition1>) {
# do something
}
else if(<condition2>) {
# do something different
}
else {
# do something different
}
4 / 15

Lệnh if

> x <- 8
> if(x > 3) {
y <- 10
} else {
y <- 0
}
> y
[1] 10
y <- if(x > 3) {
10
} else {
0
}
> x <- -5
> y
[1] 0
5 / 15

Lệnh if

Ta có thể không cần khai báo lệnh else nếu khai báo nhiều lệnh if bao trùm các điều kiện khác nhau.

if(<condition1>) {
}
if(<condition2>) {
}
> if(x > 3) {
y <- 10
}
> if(x <= 3) {
y <- 1
}
> x <- 3
> y
[1] 1
6 / 15

Lệnh for

Lệnh này tạo vòng lặp trên các thành phần của đối tượng theo variable.

for(i in 1:6) { # Tương ứng mỗi giá trị của vector từ 1 đến 6 thì
print(i) # biến/variable `i` được in ra
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
7 / 15

Lệnh for

Các lệnh for này xuất ra kết quả tương tự nhau.

x <- c("a", "b", "c", "d")
for(i in 1:4) { # Biến `i` được subset từ 1 đến 4 theo vị trí index trong vector `x`
print(x[i])
}
for(i in seq_along(x)) { # Lệnh seq_along(x) in ra vị trí index từ 1 đến 4 trong vector `x`
print(x[i])
}
for(letter in x) { # Biến `letter` ở trong vector `x` in ra lần lượt các thành phần
print(letter)
}
for(i in 1:4) print(x[i]) # Cách viết ngắn gọn trên cùng 1 hàng
8 / 15

Nested for loops

Lệnh for có thể được lồng ghép vào các vòng lặp khác. Thường rất khó để hiểu.

> x <- matrix(1:6, 2, 3)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
# ↓ Lệnh seq_len() đánh số từ 1 đến giá trị hiện hữu của vector (positive integer)
> for(i in seq_len(nrow(x))) { # Mỗi giá trị của i từ 1:2
for(j in seq_len(ncol(x))) { # Mỗi giá trị của j từ 1:3
print(x[i, j]) # In thành phần trong ma trận hàng i, cột j
}
}
[1] 1
[1] 3
[1] 5
[1] 2
[1] 4
[1] 6
9 / 15

Nested for loops (break it down)

> seq_len(nrow(x))
[1] 1 2
> seq_len(ncol(x))
[1] 1 2 3
> for(i in 1:2) {
for(j in 1:3) {
print(i)
}
}
[1] 1
[1] 1
[1] 1
[1] 2
[1] 2
[1] 2
> seq_len(nrow(x))
[1] 1 2
> seq_len(ncol(x))
[1] 1 2 3
> for(i in 1:2) {
for(j in 1:3) {
print(j)
}
}
[1] 1
[1] 2
[1] 3
[1] 1
[1] 2
[1] 3
10 / 15

Nested for loops

Ghép lại kết quả để hiểu lệnh ban đầu.

> for(i in 1:2) {
for(j in 1:3) {
print(c(i, j))
}
}
[1] 1 1 # Lặp `i` trước rồi lặp `j` sau
[1] 1 2 # Lần lượt có vector chứa
[1] 1 3 # tổ hợp i và j
[1] 2 1
[1] 2 2
[1] 2 3
> x # ma trận
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> for(i in 1:2) {
for(j in 1:3) {
print(x[i, j])
}
}
[1] 1
[1] 3
[1] 5
[1] 2
[1] 4
[1] 6
11 / 15

Lệnh while

Bản chất lệnh while là dạng kết hợp giữa lệnh if và lệnh for khi nó kiểm tra điều kiện rồi thực hiện vòng lặp.
Cần lưu ý khi sử dụng rất dễ tạo ra vòng lặp vô hạn làm treo máy (bấm nút STOP ở console khi ở tình huống này).

> count <- 0 # Cho vector `count` có giá trị 0
> while(count < 4) { # Nếu `count` nhỏ hơn 4
print(count) # In vector `count`
count <- count + 1 # Vector `count` lúc này là chính nó được cộng thêm 1
}
[1] 0
[1] 1
[1] 2
[1] 3
12 / 15

Lệnh while

Cách lồng ghép giữa lệnh while và lệnh if. R xét điều kiện đi từ trên xuống và từ trái qua.

z <- 5
while(z >= 3 && z <= 10) {
print(z)
coin <- rbinom(1, 1, 0.5)
if(coin == 1) { ## random walk
z <- z + 1
} else {
z <- z - 1
}
}
[1] 5 # Kết quả ra một dãy số rất dài đến khi
[1] 6
...
[1] 7
[1] 3 # ra ngoài điều kiện cho `z` thì dừng
13 / 15

Lệnh repeat

Lệnh repeat tạo ra vòng lặp vô hạn và chỉ dừng lại khi dùng lệnh break.

result <- c("Hello World")
i <- 1
repeat {
print(result)
i <- i + 1
if(i > 5) {
break
}
}
[1] "Hello World"
[1] "Hello World"
[1] "Hello World"
[1] "Hello World"
[1] "Hello World"
14 / 15

Lệnh nextreturn

Lệnh next dùng để cho qua (skip) một vòng lặp. Lệnh return sẽ kết thúc một hàm và gán kết quả vào một đối tượng chỉ định.

> for(i in 1:10) {
if(i <= 3) {
next
}
print(i)
}
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
> for(i in 1:10) {
if(i <= 3) {
next
}
return(i)
}
> i
[1] 4
15 / 15

Control structure

Các lệnh if, else, for, while, ... giúp xử lý dữ liệu theo điều kiện.

2 / 15
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow