Hướng dẫn cài đặt phần mềm r năm 2024

Tên package Ch c năngứ trellis Dùng để vẽ đồ thị và làm cho đồ thị đẹp hơn lattice Dùng để vẽ đồ thị và làm cho đồ thị đẹp hơn Hmisc Một số phương pháp mô hình dữ liệu của F. Harrell Design Một số mô hình thiết kế nghiên cứu của F. Harrell Epi Dùng cho các phân tích dịch tễ học epitools Một package khác chuyên cho các phân tích dịch tễ học Foreign Dùng để nhập dữ liệu từ các phần mềm khác như SPSS, Stata, SAS, v... Rmeta Dùng cho phân tích tổng hợp (meta-analysis) survival Chuyên dùng cho phân tích theo mô hình Cox (Cox’s proportional hazard model) Zelig Package dùng cho các phân tích thống kê trong lĩnh vực xã hội học Genetics Package dùng cho phân tích số liệu di truyền học BMA Bayesian Model Average Lme4 Phân tích hồi quy Formula Ggplot

Show

Các package này có thể cài đặt trực tuyến bằng cách chọn Install packages trong phần packages của R. Ngoài ra, nếu package đã được tải xuống máy tính cá nhân, việc cài đặt có thể nhanh hơn bằng cách chọn Install package(s) from local zip file cũng trong phần packages.

  1. “Văn phạm” R: R là một ngôn ngữ tương tác (interactive language), có nghĩa là khi chúng ta ra lệnh, và nếu lệnh theo đúng “văn phạm”, R sẽ “đáp” lại bằng một kết quả. Và, sự tương tác tiếp tục cho đến khi chúng ta đạt được yêu cầu. “Văn phạm” chung của R là một lệnh (command) hay function (tôi sẽ thỉnh thoảng đề cập đến là “hàm”). Mà đã là hàm thì phải có thông số; cho nên theo sau hàm là những thông số mà chúng ta phải cung cấp. Cú pháp chung của R là như sau: đối tượng <- hàm(thông số 1, thông số 2, ..., thông số n)

Chẳng hạn như: > reg <- lm(y ~ x) thì reg là một đối tượng (object), còn lm là một hàm, và y ~ x là thông số của hàm. Hay: > setwd("c:/works/stats")

thì setwd là một hàm, còn "c:/works/stats" là thông số của hàm. Để biết một hàm cần có những thông số nào, chúng ta dùng lệnh args(x), (args viết tắt chữ arguments) mà trong đó x là một hàm chúng ta cần biết: > args(lm) function (formula, data, subset, weights, na, method = "qr", model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular = TRUE, contrasts = NULL, offset, ...) NULL R là một ngôn ngữ “đối tượng” (object oriented language). Điều này có nghĩa là các dữ liệu trong R được chứa trong object. Định hướng này cũng có vài ảnh hưởng đến cách viết của R. Chẳng hạn như thay vì viết x = 5 như thông thường chúng ta vẫn viết, thì R yêu cầu viết là x == 5. Đối với R, x = 5 tương đương với x <- 5. Cách viết sau (dùng kí hiệu <-) được khuyến khích hơn là cách viết trước (=). Chẳng hạn như: > x <- rnorm(10) có nghĩa là mô phỏng 10 số liệu và chứa trong object x. Chúng ta cũng có thể viết x = rnorm(10). Một số kí hiệu hay dùng trong R là: x <- 5 5 được gán cho x (x := 5) x == 5 x bằng 5 (so sánh) x != 5 x không bằng 5 y < x y nhỏ hơn x x > y x lớn hơn y z <= 7 z nhỏ hơn hoặc bằng 7 p >= 1 p lớn hơn hoặc bằng 1 is(x) Có phải x là biến số trống không (missing value = not available) A & B A và B (AND) A | B A hoặc B (OR) ! Không là (NOT)

Với R, tất cả các câu chữ hay lệnh sau kí hiệu # đều không có hiệu ứng, vì # là kí hiệu dành cho người sử dụng thêm vào các ghi chú, ví dụ: > # lệnh sau đây sẽ mô phỏng 10 giá trị normal > x <- rnorm(10)

3 Cách đặt tên trong R Đặt tên một đối tượng (object) hay một biến số (variable) trong R khá linh hoạt, vì R không có nhiều giới hạn như các phần mềm khác. Tên một object phải được viết liền nhau (tức không được tách rời bằng một khoảng trống). Chẳng hạn như R chấp nhận myobject nhưng không chấp nhận my object. > myobject <- rnorm(10) > my object <- rnorm(10) Error: syntax error in "my object"

Nhưng đôi khi tên myobject khó đọc, cho nên chúng ta nên tách rời bằng “.” Như my. > my <- rnorm(10) Một điều quan trọng cần lưu ý là R phân biệt mẫu tự viết hoa và viết thường. Cho nên

Chúng ta dùng function c (viết tắt của chữ concatenation – có nghĩa là “móc nối vào nhau”) để nhập dữ liệu. Chú ý rằng mỗi số liệu cho mỗi hộ GĐ được cách nhau bằng một dấu phẩy. Kí hiệu thu <- (cũng có thể viết là thu =) có nghĩa là các số liệu theo sau sẽ nằm trong biến số thu. Chúng ta sẽ gặp kí hiệu này rất nhiều lần trong khi sử dụng R. R là một ngôn ngữ cấu trúc theo dạng đối tượng (thuật ngữ chuyên môn là “object-oriented language”), vì mỗi cột số liệu hay mỗi một data là một đối tượng (object) đối với R. Vì thế, thu và chi là hai đối tượng riêng lẻ. Bây giờ chúng ta cần phải nhập hai đối tượng này thành một data để R có thể xử lí sau này. Để làm việc này chúng ta cần đến function data: > thca1 <- data(thu, chi) Trong lệnh này, chúng ta muốn cho R biết rằng nhập hai cột (hay hai đối tượng) thu và chi vào một đối tượng có tên là thca1. Đến đây thì chúng ta đã có một đối tượng hoàn chỉnh để tiến hành phân tích thống kê. Để kiểm tra xem trong thca1 có gì, chúng ta chỉ cần đơn giản gõ: > thca Nếu chúng ta muốn lưu lại các số liệu này trong một file theo dạng R, chúng ta cần dùng lệnh save. Giả sử chúng ta muốn lưu số liệu trong directory có tên là “d:\Econometrics\hqtt”, chúng ta cần gõ như sau: > setwd("d:/Econometrics/hqtt") > save(thca1, file="thca1") Lệnh đầu tiên (setwd – chữ wd có nghĩa là working directory) cho R biết rằng chúng ta muốn lưu các số liệu trong directory có tên là “d:\Econometrics\hqtt”. Lưu ý rằng thông thường Windows dùng dấu backward slash “\”, nhưng trong R chúng ta phải dùng dấu forward slash “/”. Lệnh thứ hai (save) cho R biết rằng các số liệu trong đối tượng thca1 sẽ lưu trong file có tên là "thca1". Sau khi gõ xong hai lệnh trên, một file có tên thca1 sẽ có mặt trong directory đó (dir phải được tạo trước).

4 Nhập dữ liệu trực tiếp: edit(data()) Ví dụ 1 (tiếp tục): Chúng ta có thể nhập số liệu về thu nhập và chi tiêu của 10 hộ GĐ bằng một function rất có ích, đó là: edit(data()). Với function này, R sẽ cung cấp cho chúng ta một window mới với một dãy cột và dòng giống như Excel, và chúng ta có thể nhập số liệu trong bảng đó. Ví dụ: > ins <- edit(data()) Ở đây, R không biết chúng ta có biến số nào, cho nên R liệt kê các biến số var1,var2, v... Nhấp chuột vào cột var1 và thay đổi bằng cách gõ vào đó thu. Nhấp chuột vào cột var2 và thay đổi bằng cách gõ vào đó chi. Sau đó gõ số liệu cho từng cột. Sau khi xong, bấm nút chéo X ở góc phải của spreadsheet, chúng ta sẽ có một data tên ins với hai biến số thu và chi. 4 Nhập dữ liệu từ một text file: read Ví dụ 2: Nhập file mets trong thư mục ‘d:/Econometrics’ > setwd('d:/Econometrics') > mets <- read('mets', header=TRUE) 4 Nhập dữ liệu từ Excel: read Để nhập số liệu từ phần mềm Excel, chúng ta cần tiến hành 2 bước: - Bước 1: Dùng lệnh “Save as” trong Excel và lưu số liệu dưới dạng “CSV (Comma delimited)”; - Bước 2: Dùng R (lệnh read) để nhập dữ liệu dạng csv. Ví dụ 3: Sử dụng file PS1 trong thư mục d:\Econometrics. Trước hết save as PS1 dưới dạng CSV (Comma delimited) Sau đó vào R và viết những lệnh sau đây: > setwd("d:/Econometrics")

ps <- read("ps1", header=TRUE) Lệnh thứ hai read yêu cầu R đọc số liệu từ “excel”, dùng dòng thứ nhất là tên cột, và lưu các số liệu này trong một object có tên là ps. Bây giờ chúng ta có thể lưu ps dưới dạng R để xử lí sau này bằng lệnh sau đây: > save(ps, file="ps")

Ví dụ 3: (tiếp theo) Sử dụng file thca trong thư mục d:\Econometrics\hqtt. Trước hết save as thca dưới dạng CSV (Comma delimited) Sau đó vào R và viết những lệnh sau đây: > setwd("d:/Econometrics/hqtt") > thca <- read("thca", header=TRUE) Lệnh thứ hai read yêu cầu R đọc số liệu từ “excel”, dùng dòng thứ nhất là tên cột, và lưu các số liệu này trong một object có tên là thca. Ta sẽ ghép thêm biến giới tính của chủ hộ sex > sex <- c('Nam', 'Nu', 'Nam', 'Nam', 'Nam', 'Nu', 'Nam', 'Nu', 'Nam', 'Nu') > # Ghép sex vào thca > thca <- data(thca, sex)

Kiểm tra dữ liệu trong thca > thca chi thu so khu tai sex 1 12 16 3 noi 400 Nam 2 15 20 4 noi 600 Nu 3 18 24 5 ngoai 750 Nam 4 22 28 6 noi 870 Nam 5 23 32 5 ngoai 1070 Nam 6 25 36 5 ngoai 1250 Nu 7 30 40 7 noi 1430 Nam 8 31 44 6 ngoai 1650 Nu 9 36 48 8 noi 1800 Nam 10 38 52 8 ngoai 2000 Nu > # Lưu data frame thca vào file thca > save(thca, file='thca')

4 Nhập dữ liệu từ file stata bằng lệnh: read Giả sử ta có dữ liệu từ file stata là HHEXP98N ở thư mục “d:\Econometrics” cần nhập vào R, với tên gọi như cũ, ta sử dụng câu lệnh read() và thực hiện trong R như sau: > library(foreign) > HHEXP98N <- read("HHEXP98N") > save(HHEXP98N, file="HHEXP98N")

4 Nhập dữ liệu từ file Eviews bằng lệnh: readEViews

Giả sử chúng ta cần đọc dữ liệu có tên gasoline ở thư mục “d:\Econometrics”. Chúng ta thực hiện như sau: > library(hexView)

[1] "househol" "sex" "age" "educyr98" "farm" "urban98" "province" "hhsize" "ricexpd" "pcexp2"

Ý nghĩa các biến trong ps: 1. househol: Household code; 2. sex: Gender of HH. Head (1:M; 2:F); 3. age: Age of household head; 4. educyr98: Schooling year of HH. Head; 5. farm: Type of HH (1:farm; 0:nonfarm); 6. urban98: 1:urban 98; 0: rural 98; 7. province: Province code; 8. hhsize: Household size; 9. ricexpd: Value rice expenditures; 10. pcexp2: B for 98 nominal pc exp.

4 Tạo dãy số bằng hàm seq, rep và gl R còn có công dụng tạo ra những dãy số rất tiện cho việc mô phỏng và thiết kế thí nghiệm. Những hàm thông thường cho dãy số là seq (sequence), rep (repetition) và gl (generating levels):

Áp dụng seq

  • Tạo ra một vector số x từ 1 đến 12: > x <- (1:12) > x [1] 1 2 3 4 5 6 7 8 9 10 11 12 > seq(12) [1] 1 2 3 4 5 6 7 8 9 10 11 12 > y <- seq(12) > y [1] 1 2 3 4 5 6 7 8 9 10 11 12
  • Tạo ra một vector số từ 12 đến 5: > x <- (12:5) > x [1] 12 11 10 9 8 7 6 5 > seq(12,7) [1] 12 11 10 9 8 7 Công thức chung của hàm seq là seq(from, to, by= ) hay seq(from, to, length= ). Cách sử dụng sẽ được minh hoạ bằng vài ví dụ sau đây:
  • Tạo ra một vector số từ 4 đến 6 với khoảng cách bằng 0: > seq(4, 6, 0) [1] 4 4 4 4 5 5 5 5 6.
  • Tạo ra một vector 10 số, với số nhỏ nhất là 2 và số lớn nhất là 15 > seq(length=10, from=2, to=15)
[1] 2 3 4 6 7 9. 222222
10 12 13 15.

Áp dụng rep Công thức của hàm rep là rep(x, times, ...), trong đó, x là một biến số và times là số lần lặp lại. Ví dụ:

  • Tạo ra số 10, 3 lần: > rep(10, 3) [1] 10 10 10
  • Tạo ra số 1 đến 4, 3 lần: > rep(c(1:4), 3) hay > rep(seq(1:4), 3) [1] 1 2 3 4 1 2 3 4 1 2 3 4
  • Tạo ra số 1, 2, 4, 5 lần: > rep(c(1, 2, 4), 5) [1] 1 2 4 1 2 4 1 2 4 1 2 4 1 2 4.

Áp dụng gl gl được áp dụng để tạo ra một biến thứ bậc (categorical variable), tức biến không để tính toán, mà là đếm. Công thức chung của hàm gl là gl(n, k, length = n*k, labels = 1:n, ordered = FALSE) và cách sử dụng sẽ được minh hoạ bằng vài ví dụ sau đây:

  • Tạo ra biến gồm bậc 1 và 2; mỗi bậc được lặp lại 8 lần: > gl(2, 8) [1] 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 Levels: 1 2 Hay một biến gồm bậc 1, 2 và 3; mỗi bậc được lặp lại 5 lần: > gl(3, 5) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3
  • Tạo ra biến gồm bậc 1 và 2; mỗi bậc được lặp lại 10 lần (do đó length=20): > gl(2, 10, length=20) [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 Levels: 1 2

Hay: > gl(2, 2, length=20) [1] 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 Levels: 1 2

  • Cho thêm kí hiệu: > gl(2, 5, label=c("C", "T")) [1] C C C C C T T T T T Levels: C T
  • Tạo một biến gồm 4 bậc 1, 2, 3, 4. Mỗi bậc lặp lại 2 lần. > rep(1:4, c(2,2,2,2)) [1] 1 1 2 2 3 3 4 4 Cũng tương đương với: > rep(1:4, each = 2)

5 Chiết dữ liệu từ một data .frame Trong ps có 10 biến số. > names(ps) [1] "househol" "sex" "age" "educyr98" "farm" "urban98" [7] "province" "hhsize" "ricexpd" "pcexp2" Chúng ta có thể chiết dữ liệu ps và chỉ giữ lại những biến số cần thiết như giới tính (sex), độ tuổi (age), lượng gạo tiêu thụ (ricexpd) và giá gạo (pcexp2). Để ý từ lệnh names(ps) rằng biến số sex là cột số 2, age là cột số 3, ricexpd là cột số 9 và biến số pcexp2 là cột số 10. Chúng ta có thể dùng lệnh sau đây: > data2 <- ps[, c(2,3,9,10)] > dim(data2) [1] 5999 4 > names(data2) [1] "sex" "age" "ricexpd" "pcexp2" Ở đây, chúng ta lệnh cho R biết rằng chúng ta muốn chọn cột số 2, 3, 9 và 10, và đưa tất cả số liệu của hai cột này vào data mới có tên là data2. Chú ý chúng ta sử dụng ngoặc kép vuông [] chứ không phải ngoặc kép vòng (), vì ps không phải làm một function. Dấu phẩy phía trước c(), có nghĩa là chúng ta chọn tất cả các dòng số liệu trong data ps.

Nhưng nếu chúng ta chỉ muốn chọn 10 dòng số liệu đầu tiên, thì lệnh sẽ là: > data3 <- ps[1:10, c(2,3,9,10)] > print(data3) sex age ricexpd pcexp 1 2 68 2408 4207. 2 2 57 1416 4856. 3 1 42 1610 10521. 4 2 72 1097 5426. 5 2 73 5355 4982. 6 2 66 2012 5501. 7 2 73 2748 3080. 8 1 46 1152 3429. 9 1 50 1215 7297. 10 1 45 1188 6009.

Chú ý lệnh print(arg) đơn giản liệt kê tất cả số liệu trong data arg. Thật ra, chúng ta chỉ cần đơn giản gõ data3, kết quả cũng giống y như print(data3).

5 Nhập hai data thành một: merge Giả sử chúng ta có dữ liệu chứa trong hai data. Dữ liệu thứ nhất tên là d1 gồm 3 cột: id, sex, tc như sau: > d id sex tc 1 1 Nam 4. 2 2 Nu 3. 3 3 Nu 4. 4 4 Nam 7. 5 5 Nam 5. 6 6 Nu 4. 7 7 Nam 5. 8 8 Nam 6. 9 9 Nam 5. 10 10 Nu 4. Dữ liệu thứ hai tên là d2 gồm 3 cột: id, sex, tg như sau: > d id sex tg 1 1 Nam 1. 2 2 Nu 2. 3 3 Nu 0. 4 4 Nam 1. 5 5 Nam 2. 6 6 Nu 1. 7 7 Nam 2. 8 8 Nam 1. 9 9 Nam 5. 10 10 Nu 1. 11 11 Nu 1. Hai dữ liệu này có chung hai biến số id và sex. Nhưng dữ liệu d1 có 10 dòng, còn dữ liệu d2 có 11 dòng. Chúng ta có thể nhập hai dữ liệu thành một data bằng cách dùng lệnh merge như sau: > d <- merge(d1, d2, by="id", all=TRUE) > d id sex tc sex tg 1 1 Nam 4 Nam 1. 2 2 Nu 3 Nu 2. 3 3 Nu 4 Nu 0. 4 4 Nam 7 Nam 1. 5 5 Nam 5 Nam 2. 6 6 Nu 4 Nu 1. 7 7 Nam 5 Nam 2. 8 8 Nam 6 Nam 1. 9 9 Nam 5 Nam 5.

5 Biến đổi số liệu bằng cách dùng replace Một cách biến đổi số liệu khác là dùng replace, dù cách này có vẻ rườm rà chút ít. Tiếp tục ví dụ trên, chúng ta biến đổi từ thu sang loai như sau: > loai <- thu > loai <- replace(loai, thu < 20, 1) > loai <- replace(loai, thu >= 20 & thu < 50, 2) > loai <- replace(loai, thu >= 50, 3)

5 Biến đổi thành yếu tố (factor) Trong phân tích thống kê, chúng ta phân biệt một biến số mang tính yếu tố (factor) và biến số liên tục bình thường. Biến số yếu tố không thể dùng để tính toán như cộng trừ nhân chia, nhưng biến số số học có thể sử dụng để tính toán. Chẳng hạn như trong ví dụ thu và loai trên, loai là yếu tố vì giá trị trung bình giữa 1 và 2 chẳng có ý nghĩa thực tế gì cả; còn thu là biến số số học. Nhưng hiện tại, loai được xem là một biến số số học. Để biến thành biến số yếu tố, chúng ta cần sử dụng function factor như sau: > loai <- factor(loai) > loai [1] 1 2 2 2 2 2 2 2 2 3 Levels: 1 2 3

Chú ý R bây giờ thông báo cho chúng ta biết loai có 3 bậc: 1,2,3. Nếu chúng ta yêu cầu R tính số trung bình của loai, R sẽ không làm theo yêu cầu này, vì đó không phải là một biến số số học: > mean(loai) [1] NA Warning message: In mean(loai) : argument is not numeric or logical: returning NA

Dĩ nhiên, chúng ta có thể tính giá trị trung bình của loai: > mean(loai) [1] 2 nhưng kết quả 2 này không có ý nghĩa gì trong thực tế cả. 5 Phân nhóm số liệu bằng cut2 (Hmisc) Trong phân tích thống kê, có khi chúng ta cần phải phân chia một biến số liên tục thành nhiều nhóm dựa vào phân phối của biến số. Chẳng hạn như đối với biến số thu chúng ta có thể “cắt” dãy số thành 3 nhóm tương đương nhau bằng cách dùng function cut2 (trong thư viện Hmisc) như sau: > # nhập thư viện Hmisc để có thể dùng function cut > library(Hmisc) > # chia biến số thu thành 2 nhóm và để trong đối tượng group > group <- cut2(thu, g=2) > table(group) group [16,36) [36,52] 5 5

6. Sử dụng R cho tính toán đơn giản

Một trong những lợi thế của R là có thể sử dụng như một ... máy tính cầm tay.

Thật ra, hơn thế nữa, R có thể sử dụng cho các phép tính ma trận và lập chương trình. Trong chương này tôi chỉ trình bày một số phép tính đơn giản mà học sinh hay sinh viên có thể sử dụng lập tức trong khi đọc những dòng chữ này.

6 Tính toán đơn giản Cộng hai số hay nhiều số với nhau: > 15+ [1] 3012

Cộng và trừ: > 15+2997- [1] - Nhân và chia > -27*12/ [1] -15.

Số lũy thừa: (25 – 5) 3 > (25 - 5)^ [1] 8000 Căn số bậc hai: 10 > sqrt(10) [1] 3.

Số pi (π) > pi [1] 3. > 2+3*pi [1] 11. Logarit Nepe: ln > log(10) [1] 2.

Logarit thập phân: lg > log10(2+3*pi) [1] 1. Số mũ: e > exp(1) [1] 2.

Hàm số lượng giác > cos(pi) [1] - Vector (Mảng 1 chiều) > x <- c(2,3,1,5,4,6,7,6,8) > x [1] 2 3 1 5 4 6 7 6 8

sum(x) [1] 42 > x*

[1] 4 6 2 10 8 12 14 12 16

exp(x/10) [1] 1 1 1. 1 1 1 2. 1. [9] 2. > exp(cos(x/10)) [1] 2 2 2. 2 2 2 2. 2. [9] 2.

Tính tổng bình phương (sum of squares): 12 + 2 2 + 3 2 + 4 2 + 5 2 =? > x <- c(seq(1:5)) > sum(x^2) [1] 55

Tính tổng bình phương điều chỉnh

(adjusted sum of squares):

n 2 i i 1

(x x)? 

  

sum((x-mean(x))^2) [1] 10 Trong công thức trên mean(x)là số trung bình của vector x. Tính TB sai số bình phương (mean square error): n 2 i i 1
1

(x x)? n 

  

sum((x-mean(x))^2)/length(x) [1] 2

Tính phương sai (variance) và độ lệch chuẩn (standard deviation):

Phương sai:

n 2 2 i i 1

1

s (x x) n 1

 

 

var(x)

Ma trận vô hướng/đơn vị (scalar matrix) là một ma trận vuông (tức số dòng bằng số cột), và tất cả các phần tử nằm ngoài đường chéo (off-diagonal elements) là 0, và các phần tử trên đường chéo là 1. Chúng ta có thể tạo một ma trận như thế bằng R như sau: > # tạo ra một ma trận 3 x 3 với tất cả phần tử là 0. > A <- matrix(0, 3, 3)

A [,1] [,2] [,3] [1,] 0 0 0 [2,] 0 0 0 [3,] 0 0 0 > # cho các phần tử đường chéo bằng 1 > diag(A) <- 1 > diag(A) [1] 1 1 1

bây giờ ma trận A sẽ là: > A [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1

6.2 Chiết phần tử từ ma trận > y <- c(1,2,3,4,5,6,7,8,9,10,11,12) > A <- matrix(y, nrow=3) > A [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12

cột 1 của ma trận A > A[,1] [1] 1 2 3

dòng 3 của ma trận A > A[3,] [1] 3 6 9 12

dòng 2, cột 3 của ma trận A > A[2,3] [1] 8

tất cả các dòng của ma trận A, ngoại trừ dòng 2

> A[-2,]
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 3 6 9 12

tất cả các cột của ma trận A, ngoại trừ cột 1 > A[,-1] [,1] [,2] [,3] [1,] 4 7 10 [2,] 5 8 11 [3,] 6 9 12

xem phần tử nào lớn hơn 5. > A > 5 [,1] [,2] [,3] [,4] [1,] FALSE FALSE TRUE TRUE [2,] FALSE FALSE TRUE TRUE [3,] FALSE TRUE TRUE TRUE

6.2 Tính toán với ma trận Cộng và trừ hai ma trận. Cho hai ma trận A và B như sau: > A <- matrix(1:12, 3, 4) > A [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 > B <- matrix(-1:-12, 3, 4) > B [,1] [,2] [,3] [,4] [1,] -1 -4 -7 - [2,] -2 -5 -8 - [3,] -3 -6 -9 -

Chúng ta có thể cộng A+B: > C <- A+B > C [,1] [,2] [,3] [,4] [1,] 0 0 0 0 [2,] 0 0 0 0 [3,] 0 0 0 0

Hay A-B: > D <- A-B > D [,1] [,2] [,3] [,4]

B <- solve(A) # Nghịch đảo ma trận A > B [,1] [,2] [1,] 0 -0. [2,] -0 0. > X <- B%*%Y > X [,1] [1,] 1. [2,] 0.

Chúng ta có thể kiểm tra: > 3X[1,1]+4X[2,1] [1] 4

Trị số và vectơ eigen (riêng/đặc trưng) của A cũng có thể tính toán bằng function eigen như sau: > eigen(A) $values [1] 7 2

$vectors [,1] [,2] [1,] -0 -0. [2,] -0 0.

Định thức (determinant). Làm sao chúng ta xác định một ma trận có thể đảo nghịch hay không? Ma trận mà định thức bằng 0 là ma trận suy biến (singular matrix) và không thể đảo nghịch. Để tính định thức, R dùng lệnh det(). Ví dụ: > E <- matrix((1:9), 3, 3) > E [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 > det(E) [1] 0 Nhưng ma trận F sau đây thì có thể đảo nghịch: > F <- matrix((1:9)^2, 3, 3) > F [,1] [,2] [,3] [1,] 1 16 49 [2,] 4 25 64 [3,] 9 36 81 > det(F) [1] -

Và nghịch đảo của ma trận F (F-1) có thể tính bằng function solve(F) như sau: > solve(F) [,1] [,2] [,3] [1,] 1 -2 0. [2,] -1 1 -0. [3,] 0 -0 0.

Ngoài những phép tính đơn giản này, R còn có thể sử dụng cho các phép tính phức tạp khác. Một lợi thế đáng kể của R là phần mềm cung cấp cho người sử dụng tự do tạo ra những phép tính phù hợp cho từng vấn đề cụ thể. R có một package Matrix chuyên thiết kế cho tính toán ma trận. Bạn đọc có thể tải package xuống, cài vào máy, và sử dụng, nếu cần. Địa chỉ để tải là: cran.au.r-project/bin/windows/contrib/ rrelease/Matrix_0.995-8 cùng với tài liệu chỉ dẫn cách sử dụng (dài khoảng 80 trang): cran.au- project.org/doc/packages/Matrix.