R-004 Làm quen với R

Nội dung bài viết

1. In thông tin ra màn hình R:

Để có thể in ra giá trị của một biến hoặc biểu thức, có 3 cách:

  • Chỉ việc Enter sau khi gõ tên biến và biểu thức, mà hình R-prompt sẽ xuất ra màn hình giá trị tương ứng:
x <- "Toi yeu ThetaLog.com"
x
sqrt(4)
[1] "Toi yeu ThetaLog.com"
[1] 2
  • Khi bạn gõ một biểu thức như trên, R sẽ tính giá trị biểu thức trả về sau đó lập tức gọi hàm print. Hay cách khác nó tương đương với:
x <- "Toi yeu ThetaLog.com"
print(x)
print(sqrt(4))

Ưu điểm của hàm print là nó cho phép bạn in thông tin theo định dạng mình mong muốn, hơn nữa bạn có thể lồng vào hàm khác khi cần thiết.

Điểm yếu duy nhất của print là nó không cho phép in ra màn hình nhiều giá trị. Điều này có thể khắc phục với hàm cat.

  • cat giúp bạn in ra màn hình nhiều giá trị liên tiếp. Ví dụ:
cat("Gia tri cua 4+3 la:", 4+3)
Gia tri cua 4+3 la: 7

2. Lưu giá trị vào một biến:

Để lưu một giá trị cần thiết vào một biến trong R chúng ta sử dụng toán tử gán <-, mặc định nếu không nói gì thêm R sẽ tự động suy ra kiểu của giá trị mà nó được gán.

Vì R là một ngôn ngữ dynamically typed language nên nó không bắt buộc biến của bạn phải luôn ở một kiểu nhất định, chúng ta có thể đặt biến x là một số thực nào đấy, sau đó chuyển x thành dạng chuổi, R sẽ không báo bất kì lỗi nào. (trong các ngôn ngữ static typed language thì đây là điều cấm không cho phép)

3. Xuất ra màn hình các biến, hàm đang được định nghĩa trong phiên làm việc:

R cung cấp hàm ls() hàm này sẽ liệt kê ra tất cả các biến và hàm mà chúng ta định nghĩa. Hoặc bạn có thể xem ở bên tay phải RStudio có một thẻ Environment, thẻ này chứa thông tin và đầy đủ hơn cả hàm ls() :D

4. Tạo và thao tác với vector:

(sẽ có một bài viết chi tiết hơn về vector trong R)

vector là một kiểu được dựng sẳn của R. vector ở đây không có nghĩa là một vector số học, mà nó có thể là một vector của một kiểu bất kì.

vector1 = c(1,2,3,4)
vector2 = c(4,5,6,7)
print(vector1 + vector2)
print(vector1 * vector2)
[1]  5  7  9 11
[1]  4 10 18 28

Thậm chí cả một vector chuổi ký tự:

vector3 = c('a', 'ab', 'abcd')

…và tất nhiên nếu bạn lấy một vector số cộng với một vector chuổi ký tự thì R sẽ báo lỗi trên màn hình R-prompt.

vector1 + vector3
Error in vector1 + vector3 : non-numeric argument to binary operator

5. Tạo và thao tác với matrix:

(sẽ có một bài viết chi tiết hơn về matrix trong R)

Tạo một ma trận 2x3 trên R bằng một vector như sau:

m <- matrix(c(1,2,3,4,5,6), nrow=2, ncol=3)
m
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

Hoặc có thể khai báo đơn giản số dòng nrow:

m <- matrix(c(1,2,3,4,5,6), nrow=2)
m
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

6. Tạo và thao tác với list:

(sẽ có một bài viết chi tiết hơn về list trong R)

Chúng ta có thể tạo list một danh sách gồm các object khác nhau về kiểu. Với các ngôn ngữ khác như Python thì list không lưu tên định danh của các object con. Với R chúng ta có thể lưu lại tên của nó để tiện truy cập qua $.

l <- list(email="quangtiencs@gmail.com", website="thetalog.com")
l

Kết quả xuất hiện như sau:

$email
[1] "quangtiencs@gmail.com"

$website
[1] "thetalog.com"

Chúng ta có thể truy cập đến biến email trong list như sau:

l$email
[1] "quangtiencs@gmail.com"

Ngoài ra thì list lưu các biến con bên trong nó có thứ tự từ 1, ta có thể trích từng biến ra từ index của nó:

l[1]
$email
[1] "quangtiencs@gmail.com"

Hoặc chỉ lấy ra giá trị từ index thứ nhất:

l[[1]]
[1] "quangtiencs@gmail.com"

7. Tạo và thao tác với data.frame:

(sẽ có một bài viết chi tiết hơn về data.frame trong R)

Để tạo một data.frame (bảng dữ liệu) chúng ta có thể tạo từ các vector dữ liệu:

ten <- c("Thien", "Tram", "Khai")
gioitinh <- c("Nam", "Nu", "Nam")
dotuoi <- c(20,21,22)

# Tạo một data.frame
thongtin <- data.frame(ten, gioitinh, dotuoi)
print(thongtin)
    ten gioitinh dotuoi
1 Thien      Nam     20
2  Tram       Nu     21
3  Khai      Nam     22

8. Định nghĩa một function trong R:

Hàm trong R là một object, khi định nghĩa một hàm thì chúng ta cần lưu ý những điểm sau:

  • Input: Đầu vào là gì? Tên của các tham số đầu vào.
  • Output: Giá trị tính ra được bởi hàm.

Chẳng hạn hàm sau để tính ước số chung lớn nhất của hai số ab (Euclidean algorithm)

greatestCommonDivisor <- function(a, b){
  if (b == 0) {
    return(a)
  }
  else {
    return(greatestCommonDivisor(b, a %% b))
  }
}

Thử với số 24 và 54 nhé:

greatestCommonDivisor(24,56)
[1] 8