Lập trình với R: Các thành phần cơ bản

Trong bài viết này, chúng ta sẽ điểm qua những thành phần cơ bản của ngôn ngữ R. Đầu tiên, ta có thể sử dụng R làm máy tính bỏ túi đơn giản. Chỉ cần nhập phép toán và nhấn Enter.

5 + 7
[1] 12

Theo mặc định, R sẽ tự động in ra kết quả là 12. Nếu ta muốn sử dụng kết quả hiện tại cho những tính toán tiếp theo thì ta có thể lưu kết quả này lại vào một biến mới. Ta sử dụng toán tử gán để gán giá trị cho biến như sau:

x <- 5 + 7

Dòng lệnh trên có nghĩa là gán giá trị từ phép toán (5 + 7) và biến x. Lúc này kết quả 12 sẽ được lưu vào biến x và R không in kết quả ra dòng lệnh. Để hiển thị giá trị của biến x ta có hai cách. Cách thứ nhất bạn chỉ cần nhập biến x và nhấn Enter và cách thứ hai bạn dùng lệnh print() để in dữ liệu ra dòng lệnh.

x # cách một
print(x) # cách hai

Kí hiệu “#” trên dùng để comment một dòng lệnh trong R. Bây giờ, ta sẽ tiếp tục cho phép tính gán kết quả tính toán (x – 3) cho biến mới y.

y <- x - 3

Tương tự, bạn có thể in biến y ra dòng lệnh để xem giá trị của biến này. R là ngôn ngữ lập trình hướng đối tượng, tất cả các thành phần bên trong R đều là đối tượng. Ngay cả biến x, y ở trên cũng được biểu diễn bởi đối tượng vector với độ dài (length) là một. Cách đơn giản nhất để tạo một vector là sử dụng hàm c() (concatenate hay combine). Bây giờ, ta sẽ tiến hành tạo một vector chứa các số 1.1, 9, 3.14 và lưu vào biến z như sau:

z <- c(1.1, 9, 3.14)

Như vậy, ta vừa tạo ra một biến z có kiểu đối tượng là vector. Để tìm hiểu kỹ hơn về hàm c() ta có thể sử dụng lệnh “?” để mở tài liệu mô tả về hàm này như sau:

?c

Để thoát ra bạn nhấn phím “q” (quit) và quay lại dòng lệnh làm việc. Lúc này, khi in biến z ra dòng lệnh ta sẽ có kết quả như sau:

[1] 1.10 9.00 3.14

Để ý, ta không thấy danh sách trong vector z được phân cách bằng dấu “,” như khi khởi tạo vector z. Tiếp theo, ta có thể tạo một vector mới bởi một vector trước đó:

c(z, 555, z)
[1] 1.10 9.00 3.14 555.00 1.10 9.00 3.14

Ta thấy giá trị 555 đã được ép kiểu sang số thực (numeric) là 555.00. Numeric vector có thể biểu diễn dưới dạng đại số:

z * 2 + 100
[1] 102.20 118.00 106.28

Trước tiên, R sẽ nhân từng phần tử trong biến z với 2. Sau đó, R tiếp tục cộng 100 cho từng phần tử này để cho kết quả như trên. Ngoài các toán tử cơ bản như “+”, “-“, “*”, “/”, và “^” (trong đó x^2 có nghĩa là x mũ 2), ta còn có thể áp dụng các hàm tính toán như sqrt() để lấy căn bậc hai hoặc abs() để lấy giá trị tuyệt đối. Ta thử lấy căn bậc hai của phép toán z – 1 và gán vào biến my_sqrt:

my_sqrt <- sqrt(z - 1)
my_sqrt
[1] 0.3162278 2.8284271 1.4628739

Lúc này, ta thấy biến my_sqrt là vector có độ dài là 3, chứa kết quả trả về của phép toán sqrt(z – 1). Chắc các bạn cũng có thể đoán ra được, trong phép toán trên, R lần lượt trừ 1 cho từng phần tử trong biến z, sau đó R lấy căn bậc hai của từng phần tử này và gán kết quả trả về cho biến my_sqrt.   Khi hai vectors có cùng độ dài, R sẽ thực hiện các phép toán (“+”, “-“, “*”, “/”,…) từng phần tử tương ứng. Nếu hai vectors có độ dài khác nhau, R sẽ “recycles” vector có độ dài ngắn hơn sao cho nó có độ dài bằng với vector dài hơn. Khi ta thực hiện phép tính z * 2 + 100 ở ví dụ trước, z là vector có độ dài là 3 còn 2 và 100 là vector có độ dài là 1. Đằng sau phép tính này, R đã “recycling” 2 để tạo ra vector chứa 3 giá trị 2, và “recycling” 100 để tạo ra vector chứa 3 giá trị 100. Hay, phép tính trên được biến đổi thành z * c(2, 2, 2) + c(100, 100, 100). Lấy ví dụ khác để minh hoạ rõ hơn “recycling” hoạt động như thế nào. Ta thử cộng hai vector c(1, 2, 3, 4) và c(0, 10).

c(1, 2, 3, 4) + c(0, 10)
[1] 1 12 3 14

Ta thấy phép tính trên đã được R biến đổi thành c(1, 2, 3, 4) + c(0, 10, 0, 10). Trong trường hợp, hai vector có độ dài không chia hết cho nhau, R sẽ đưa ra một cảnh báo về phép tính này.

c(1, 2, 3, 4) + c(0, 10, 100)
[1] 1 12 103 4
Warning message:
In c(1, 2, 3, 4) + c(0, 10, 100) :
 longer object length is not a multiple of shorter object length

Qua bài viết trên, chúng ta đã học được những thành phần cơ bản trong R, làm thế nào để gán giá trị, làm thế nào để tạo vector, và hiểu được cơ chế tính toán trên hai vector như thế nào. Bước tiếp theo, ta sẽ cùng nhau tìm hiểu về cơ chế quản lý tập tin và thư mục trong R.

Nguồn tham khảo: http://swirlstats.com/

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s