Mục Tiêu:
- Hiểu các quy tắc và cách tạo biến trong R.
- Làm quen với cách định nghĩa và sử dụng hàm trong R.
- Tìm hiểu về lập trình hướng đối tượng (OOP) trong R và cách áp dụng trong các ứng dụng thực tế.
1. Quy Tắc Tạo Biến trong R
Trong R, biến được sử dụng để lưu trữ giá trị hoặc kết quả tính toán. Biến có thể chứa các loại dữ liệu khác nhau, chẳng hạn như số, chuỗi ký tự, hoặc đối tượng phức tạp hơn. Để tạo một biến trong R, bạn sử dụng toán tử <-
(hoặc =
trong một số trường hợp). Tuy nhiên, toán tử <-
được khuyến khích sử dụng trong cộng đồng R.
- Cú pháp tạo biến:
ten_bien <- gia_tri
Ví dụ:
x <- 5
y <- 10
z <- x + y # z sẽ chứa giá trị 15
- Quy tắc đặt tên biến:
- Tên biến phải bắt đầu bằng chữ cái hoặc dấu gạch dưới (
_
). - Tên biến có thể bao gồm chữ cái, số và dấu gạch dưới.
- Tên biến không được trùng với từ khóa của R (như
if
,for
,while
,function
). - Tên biến trong R phân biệt chữ hoa chữ thường (case-sensitive), ví dụ
x
vàX
là hai biến khác nhau.
- Tên biến phải bắt đầu bằng chữ cái hoặc dấu gạch dưới (
Ví dụ sai khi đặt tên biến:
5x <- 10 # Không hợp lệ, không thể bắt đầu bằng số.
Ví dụ đúng khi đặt tên biến:
x_5 <- 10
- Quy tắc sử dụng các ký tự đặc biệt: Ngoài việc sử dụng dấu gạch dưới, các ký tự như dấu chấm (.) cũng có thể được sử dụng trong tên biến, nhưng cần chú ý khi viết mã vì nó có thể gây nhầm lẫn với các hàm.
2. Hàm trong R
Hàm là một phần rất quan trọng trong lập trình R. Hàm giúp chúng ta đóng gói các lệnh trong một khối mã và tái sử dụng chúng nhiều lần.
- Cú pháp định nghĩa hàm:
ten_ham <- function(tham_so1, tham_so2, ...) { # Thực hiện các thao tác return(ket_qua) }
Ví dụ, một hàm đơn giản tính tổng hai số:
sum_two_numbers <- function(a, b) {
result <- a + b
return(result)
}
sum_two_numbers(5, 3) # Kết quả trả về là 8
- Quy tắc khi tạo hàm:
- Tên hàm nên mô tả rõ chức năng của hàm (ví dụ
sum_two_numbers
cho hàm tính tổng hai số). - Các tham số hàm có thể có giá trị mặc định. Nếu người dùng không cung cấp giá trị cho tham số, giá trị mặc định sẽ được sử dụng.
- Tên hàm nên mô tả rõ chức năng của hàm (ví dụ
Ví dụ:
multiply_numbers <- function(a, b = 2) {
return(a * b)
}
multiply_numbers(3) # Trả về 6 vì b mặc định là 2
multiply_numbers(3, 4) # Trả về 12
- Các hàm có thể trả về nhiều giá trị: R cho phép bạn trả về một danh sách (list) hoặc vector, chứa nhiều giá trị từ một hàm.
3. Lập Trình Hướng Đối Tượng (OOP) trong R
Lập trình hướng đối tượng (OOP) là một mô hình lập trình mà trong đó dữ liệu được đóng gói trong các đối tượng và các đối tượng này có thể tương tác với nhau thông qua các phương thức (methods).
R hỗ trợ OOP thông qua ba hệ thống chính:
- S3: Hệ thống OOP đơn giản nhất, không cần khai báo lớp cụ thể, dễ sử dụng.
- S4: Hệ thống OOP mạnh mẽ hơn, yêu cầu khai báo lớp và các phương thức.
- R6: Hệ thống OOP hiện đại, có tính năng như các ngôn ngữ lập trình khác như Python và C++.
3.1 OOP với S3
S3 là hệ thống OOP đơn giản, cho phép bạn tạo lớp (class) và phương thức (methods) cho các đối tượng mà không cần phải khai báo rõ ràng cấu trúc lớp. Đây là hệ thống OOP phổ biến trong R.
- Định nghĩa lớp S3: Lớp trong S3 được xác định bằng cách gán thuộc tính
"class"
cho một đối tượng. Ví dụ, tạo lớpperson
:
person <- function(name, age) { person_obj <- list(name = name, age = age) class(person_obj) <- “person” # Gán lớp cho đối tượng return(person_obj) }
Tạo một đối tượng từ lớp person
p1 <- person(“John”, 25) print(p1)
- **Định nghĩa phương thức cho lớp S3:**
Phương thức cho lớp S3 là các hàm được gắn với một lớp cụ thể.
Ví dụ, tạo phương thức `print.person` để in thông tin đối tượng `person`:
```R
print.person <- function(x) {
cat("Name:", x$name, "\nAge:", x$age, "\n")
}
print(p1) # In ra thông tin của đối tượng p1
3.2 OOP với S4
Hệ thống OOP S4 cung cấp khả năng kiểm tra chặt chẽ hơn đối với các đối tượng và phương thức. S4 yêu cầu bạn phải khai báo lớp và các phương thức rõ ràng hơn.
- Định nghĩa lớp S4:
setClass("person", slots = c(name = "character", age = "numeric")) # Tạo đối tượng từ lớp S4 p2 <- new("person", name = "Jane", age = 30)
- Phương thức trong S4: Để tạo phương thức trong S4, bạn cần sử dụng
setMethod
. Ví dụ, tạo phương thứcprint
cho lớpperson
:
setMethod("show", "person", function(object) { cat("Name:", object@name, "\nAge:", object@age, "\n") }) show(p2)
3.3 OOP với R6
R6 là hệ thống OOP hiện đại nhất trong R, cung cấp đầy đủ tính năng của OOP như kế thừa và đóng gói.
library(R6)
Person <- R6Class("Person",
public = list(
name = NULL,
age = NULL,
initialize = function(name, age) {
self$name <- name
self$age <- age
},
greet = function() {
cat("Hello, my name is", self$name, "and I am", self$age, "years old.\n")
}
))
# Tạo đối tượng từ lớp R6
p3 <- Person$new("Alice", 22)
p3$greet() # Gọi phương thức greet
Tổng Kết Buổi 2:
Trong buổi học này, các em đã được giới thiệu về các quy tắc tạo biến, cách định nghĩa và sử dụng hàm trong R. Đồng thời, các em cũng đã làm quen với lập trình hướng đối tượng (OOP) trong R qua các hệ thống S3, S4 và R6. Các kiến thức này sẽ giúp các em xây dựng và tổ chức mã nguồn của mình một cách rõ ràng và hiệu quả khi làm việc với các dự án phân tích dữ liệu phức tạp.
Trong buổi tiếp theo, chúng ta sẽ tìm hiểu về cách quản lý và tiền xử lý dữ liệu với Tidyverse trong R.
Mọi câu hỏi, thắc mắc các bạn comment ở dưới thầy sẽ trả lời nhanh nhất có thể nhé. Chúc các bạn vui vẻ