R-007 list trong R
Nội dung bài viết
list
là một những kiểu dữ liệu cơ bản của R.
Để hiểu rõ list
của R các bạn có thể đọc tài liệu chi tiết về list bằng lệnh:
?list
(Mặc dù gọi là list
nhưng mình thấy nó tương ứng với dictionary và hashtable trong các ngôn ngữ lập trình khác như Python)
1. Tạo một danh sách list:
Danh sách trong R có thể tạo với hàm list()
.
l1 <- list(name="quantiencs", age=22, handsome=TRUE)
l1
$`id`
[1] "quantiencs"
$age
[1] 22
$handsome
[1] TRUE
Những thành phần tên của những thành phần sau $...
được gọi là tags
. Chúng ta có thể gọi riêng mỗi riêng từng thành phần ra:
l1$age
Không phải lúc nào chúng ta cũng nhất thiết khai báo tags
cho R.
l2 <- list("quantiencs", 22, TRUE)
l2
2. Toán tử thông dụng trên list:
Tạo một list
mẫu để thử các ví dụ sau:
a.mind.of.numbers <- list(book="A Mind For Numbers",
publisher="TarcherPerigee", author="Barbara A. Oakley", print.length=332)
2.1 Truy cập các phần tử trong list:
Có 3 cách để truy cập một phần tử trong list
:
- Dùng
[[index.number]]
a.mind.of.numbers[[3]]
[1] "Barbara A. Oakley"
- Dùng
[[key]]
a.mind.of.numbers[["author"]]
[1] "Barbara A. Oakley"
- Dùng
...$key
a.mind.of.numbers$author
[1] "Barbara A. Oakley"
2.2 Thêm một phần tử
Thêm một phần tử vào list
có thể dể dàng dùng toán tử gán:
a.mind.of.numbers[[5]] <- "thu them phan tu"
a.mind.of.numbers
$`book`
[1] "A Mind For Numbers"
$publisher
[1] "TarcherPerigee"
$author
[1] "Barbara A. Oakley"
$print.length
[1] 332
[[5]]
[1] "thu them phan tu"
Ngoài ra chúng ta có thể thêm nhờ toán tử ...$name
:
a.mind.of.numbers$ASIN <- "B00G3L19ZU"
a.mind.of.numbers
$`book`
[1] "A Mind For Numbers"
$publisher
[1] "TarcherPerigee"
$author
[1] "Barbara A. Oakley"
$print.length
[1] 332
[[5]]
[1] "thu them phan tu"
$ASIN
[1] "B00G3L19ZU"
2.3 Xóa một phần tử
Bạn có thể xóa một phần tử trong list
bằng cách gán NULL
(Một điểm lưu ý là hiện tại thì khóa ASIN
đang ở index
thứ 6 của list
. Bạn đọc tự kiểm tra.)
a.mind.of.numbers[[5]] <- NULL
a.mind.of.numbers
$`book`
[1] "A Mind For Numbers"
$publisher
[1] "TarcherPerigee"
$author
[1] "Barbara A. Oakley"
$print.length
[1] 332
$ASIN
[1] "B00G3L19ZU"
Bây giờ thì khóa ASIN
đang nằm ở index
thứ 5 thay vì 5 như trước:
(hãy cẩn thận với điều này)
a.mind.of.numbers[5]
$`ASIN`
[1] "B00G3L19ZU"
2.4 Lấy danh sách con:
Bây giờ bạn lại thắc mắc, toán tử [...]
ở trên mà nãy mình đang dùng là gì? Toán tử này có thể dùng để lấy danh sách con từ danh sách ban đầu (tương tự vector
).
a.mind.of.numbers[1:3]
$`book`
[1] "A Mind For Numbers"
$publisher
[1] "TarcherPerigee"
$author
[1] "Barbara A. Oakley"
Hoặc cũng có thể lấy từ vector
khóa:
a.mind.of.numbers[c("book", "author")]
$`book`
[1] "A Mind For Numbers"
$author
[1] "Barbara A. Oakley"
2.5 Ghép danh sách
Về mặt bản chất thì list
là một vector
của một cặp key
và value
. Do đó chúng ta có thể nối hai list
lại bằng hàm c(...)
l1 <- list(one="một", two="hai")
l2 <- list(three="ba", four="bốn")
c(l1, l2)
$`one`
[1] "một"
$two
[1] "hai"
$three
[1] "ba"
$four
[1] "bốn"