logo xDuLieu.com

Trang trướcKiểu dữ liệu VectơTrang sau

Khái niệm "vectơ"

 

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ơ.


Tạo vectơ bằng hàm 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


Tạo vectơ bằng hàm 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ì::

  • Trước hết viết câu lệnh

    > vec <- scan()

  • Thực hiện câu lệnh này bằng cách ấn phím Enter.
  • Đầu dòng dưới câu lệnh trên xuất hiện:

    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.
  • Nhập các phần tử từ bàn phím. Sau khi nhập một phần tử, ta dùng phím Spacebar để tạo một khoảng trắng hay ấn phím Enter để xuống dòng rồi nhập phần tử kế tiếp.
  • Sau khi nhập phần tử cuối cùng ấn phím Enter hai lầ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:

  • Chép các dữ liệu của cột này bằng lệnh Copy hay dùng tổ hợp phím Ctrl+C.
  • Chuyển sang khung Tương tác của RStudio. Thí dụ các phần tử này có kiểu số thì ta viết câu lệnh:

    > vexc <- scan()

    rồi ấn phím Enter
  • Đầu dòng dưới câu lệnh trên xuất hiện:

    1:

  • Dùng lệnh dán Paste hay tổ hợp phím Ctrl+V rồi ấn phím Enter.

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"


Tạo vectơ bằng toán tử :

 

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 ?



Tạo vectơ bằng hàm 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


Tạo vectơ bằng 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


Một số vectơ đặc biệt

 

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.abbmonth.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 trướcVề đầu chươngTrang sau


Trang web này được cập nhật lần cuối ngày 25/11/2018

R