Vectơ được xem là kiểu dữ liệu cơ bản và quan trọng nhất vì trong thực tế, dữ liệu đơn không nhiều, còn các kiểu dữ liệu hợp khác được phát triển từ vectơ.
Vectơ có thể được xem như một bộ gồm nhiều dữ liệu đơn có kiểu giống nhau và mỗi dữ liệu đơn ấy có vị trí nhất định trong bộ này (vectơ). Thí dụ bộ gồm 6 số 3, 5, 7, 9, 11, 13 hay bộ gồm 5 chữ “a” ”b” ”c” ”d” ”e” hình thành nên các vectơ.
c
Phương pháp khởi tạo một vectơ thông dụng nhất là dùng hàm c. c là chữ viết tắt của concatenate (Anh ngữ) nghĩa là liên kết, móc nối các phần tử lại với nhau để tạo thành một chuỗi. Thí dụ như:
x <- c(3, 5, 7, 9)
hay:
y <- c("a", "b", "c", "d", "e")
Lưu ý rằng các đối số của hàm c có thể cũng là vectơ. Xét đoạn lệnh sau:
v1 <- c(2, 4, 6)
v2 <- c(10, 20, 30, 40)
v <- (v1, v2, 18, 22)
Nếu ta liệt kê các phần tử của v trong khung Tương tác thì có kết quả sau:
> v
[1] 2 4 6 10 20 30 40 18 22
scan
Ta có thể nhập các phần tử của vectơ trực tiếp từ bàn phím với lệnh scan trong khung Tương tác.
Nếu các phần tử của vectơ vec muốn tạo là số thì::
> vec <- scan()
1:
điều này có nghĩa là R đã sẵn sàng nhận ta nhập phần tử đầu tiên.Giả sử ta đã nhập 8 số là 2, 4, 6, 8, 10, 12, 14 và 16 thì trên màn hình hiện ra:
1: 2 4 6 8 10 12 14 16
9:
Read 8 items
Khi liệt kê các phần tử của vec, ta thấy:
> vec
[1] 2 4 6 8 10 12 14 16
Nếu các phần tử của vectơ là chữ thì đối số của lệnh scan thay đổi như sau:
vec <- scan(what = "character")
Sau đó tiếp tục nhập như trường hợp trên. Lưu ý là khi nhập, không cần sử dụng cặp dấu móc kép (""). Xét thí dụ sau:
> vec <- scan(what = "character")
1: xanh do vang trang tim nau den xam
9:
Read 8 items
> vec
[1] "xanh" "do" "vang" "trang" "tim" "nau" "den" "xam"
Chép dữ liệu từ bảng tính
Ta cũng có thể dùng lệnh scan để chép dữ liệu từ một cột của một bảng tính đã có sẵn rồi dán vào R.
Thí dụ ta đã có sẵn một bảng tính MS Excel và ta muốn chép các phần tử từ một cột nào đó vào biến vexc (một vectơ) thì ta thực hiện như sau:
> vexc <- scan()
rồi ấn phím Enter1:
Thí dụ cột chứa 7 số là 10, 20, 30, 40, 50, 60 và 70 thì trên màn hình hiện ra:
1: 10
2: 20
3: 30
4: 40
5: 50
6: 60
7: 70
8:
Read 7 items
> vexc
[1] 10 20 30 40 50 60 70
Ta cũng thực hiện tương tự nếu các phần tử có kiểu chữ như thí dụ sau:
> vexkt <- scan(what = "character")
1: do
2: cam
3: vang
4: luc
5: lam
6: cham
7: tim
8:
Read 7 items
> vexkt
[1] "do" "cam" "vang" "luc" "lam" "cham" "tim"
:
Nếu ta muốn tạo ra một chuỗi số liên tiếp nhau, số sau cách số trước một đơn vị thì ta dùng toán tử : theo cú pháp a:b với a là số khởi đầu, b là số cao nhất của chuỗi số. Thí dụ:
chs <- 3:8
cũng tương đương với:
chs <- c(3, 4, 5, 6, 7, 8)
Lưu ý là a, b và các phần tử khác trong chuỗi này không bắt buộc phải nguyên. Ta hãy tìm hiểu thí dụ sau đây.
Thí dụ
Xét chuỗi số chs1 được tạo ra bằng lệnh sau:
chs1 <- 3.2:8
Hỏi chuỗi số này có chứa số 8 không ?
seq
Hàm seq có dạng phổ biến là seq(a, b, r) sẽ tạo ra một dãy số có a là số thứ nhất, b là giá trị lớn nhất của dãy (b có thể thuộc dãy số hay không) và r là khoảng cách giữa hai số liên tiếp trong dãy. Thí dụ khi ta tạo vectơ vecds bằng lệnh sau:
vecds <- seq(5, 20, 4)
Thì trên khung Tương tác ta thấy:
> vecds
[1] 5 9 13 17
Một dạng khác của hàm seq là thay đối số r bằng đối số length.out = n với n là số phần tử của dãy số. Thí dụ dãy số được tạo như sau:
vecdsn <- seq(2, 100, length.out = 5)
Các thành phần của dãy này hiện ra trên khung Tương tác như sau:
> vecdsn
[1] 2.0 26.5 51.0 75.5 100.0
Lưu ý là câu lệnh:
vecds <- seq(17)
sẽ tạo ra một vectơ có các thành phần là một dãy số nguyên liên tiếp từ 1 đến 17. Nghĩa là lệnh trên tương đương với:
vecds <- 1:17
rep
Hàm rep(z, n) sẽ tạo một vectơ trong đó z được lặp lại n lần. Lưu ý rằng z cũng có thể là một vectơ. Ta xét vecrep được tạo bằng lệnh sau:
vecrep <- rep(c(2,4,6), 4)
Các thành phần của vecrep thể hiện trên khung Tương tác như sau:
> vecrep
[1] 2 4 6 2 4 6 2 4 6 2 4 6
Một dạng khác của hàm này là rep(z, each=n) sẽ lặp lại từng thành phần của z n lần trước khi chuyển sang thành phần kế tiếp như thí dụ sau:
> vrep1 <- rep(3:6, each = 4)
> vrep1
[1] 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6
So sánh với:
> vrep2 <- rep(3:6, 4)
> vrep2
[1] 3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6
Trong R có một số vectơ đặc biệt được tạo sẵn cho ta sử dụng. Ở đây ta chỉ đề cập đến 4 vectơ là letters, LETTERS, month.abb và month.name. Cả 4 vectơ này đều có kiểu dữ liệu là chữ.
letters có 26 thành phần là 26 mẫu tự từ "a" đến "z" có kiểu chữ thường:
> letters
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n"
[15] "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
LETTERS có 26 thành phần là 26 mẫu tự từ "A" đến "Z" có kiểu chữ in hoa:
> LETTERS
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N"
[15] "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
month.abb có 12 thành phần là tên viết tắt của 12 tháng trong năm bằng tiếng Anh:
> month.abb
[1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep"
[10] "Oct" "Nov" "Dec"
month.name có 12 thành phần là tên của 12 tháng trong năm bằng tiếng Anh:
> month.name
[1] "January" "February" "March" "April"
[5] "May" "June" "July" "August"
[9] "September" "October" "November" "December"
OK
Trang web này được cập nhật lần cuối ngày 25/11/2018
R
Các chuyên đề
Xử lý dữ liệu
Ma trận
R