R-010 Cấu trúc điều khiển trong R

Nội dung bài viết

Thường thì làm thống kê với R, hầu như mọi thứ đều đã được hổ trợ sẳn, tuy nhiên bạn cũng cần trang bị một ít về kiến thức lập trình căn bản để có thể làm thống kê theo ý muốn của mình.

Một điều lưu ý các thao tác trên R nên tận dụng các phép toán trên ma trận và vector (đặc biệt sử dụng apply(...)), tránh sử dụng vòng lặp. Vòng lặp trong R rất chậm so với rất nhiều ngôn ngữ khác (Python, Java,…) do đặc thù ngôn ngữ mà tác giả muốn hướng đến.

Trong RStudio mình có thử dùng Enter thì thấy trong Console (hay R-Prompt) không được nên để gõ xuống hàng bạn có thể dùng Shift + Enter.

Trước khi vào phần này bạn cần ôn một số toán tử logic quan trọng trong R:

Toán tử Ghi chú
< nhỏ hơn
<= nhỏ hơn bằng
> lớn hơn
>= lớn hơn bằng
== so sánh bằng
!= khác
!x Not (phủ định x)
A || B Or (một trong A hoặc B là đúng thì mệnh đề đúng)
A && B And (cả A và B đúng thì mệnh đề đúng)

1. Cấu trúc if-else

Cấu trúc if-else viết đầy đủ có thể viết dưới dạng sau:

if (# Biểu thức logic TRUE FALSE) {
  # Thực thi KHỐI LỆNH 1
} else {
  # Thực thi KHỐI LỆNH 2
}

Hay ở nếu không cần mệnh đề else:

if (# Biểu thức logic TRUE FALSE) {
  # Thực thi KHỐI LỆNH 1
}

Hoặc có thể viết gọn hơn:

if (cond) expr1 else expr2
if (cond) expr

Một ví dụ đơn giản:

x <- 7
y <- 10
# Nếu (y != 10) nghĩa là (y khác 10)
if (y != 10) {
  x <- -1
} else {
  x <- 1000
}
x
[1] 1000

2. Vòng lặp for

Không nên lạm dụng for trong R, vì vòng lặp for trong R rất lâu.

Vòng lặp for sẽ lặp length(seq) lần với mỗi phần tử var trong seq. Cấu trúc vòng lặp for trong R như sau:

for (var in seq) {
  # Thực thi KHỐI LỆNH
}

Một ví dụ đơn giản:

# Tính tổng từ 2 đến 10
my.sum <- 0
for (i in 2:10) {
  my.sum <- my.sum + i
}
my.sum
[1] 54

3. Vòng lặp while

Vòng lặp while sẽ lặp đến khi điều kiện điều khiển vòng lặp FALSE:

while (cond) {
  # Thực thi KHỐI LỆNH
}

Một ví dụ đơn giản:

start <- 7
while (start < 100) {
  start <- start + 6
}
start
[1] 103