Chỉnh sửa danh sách
Thuộc phần Kiến thức nền tảng trong hành trình R của Coddy. Bài học 73 trên 78.
Giờ bạn đã biết cách tạo danh sách và truy cập các phần tử trong danh sách, hãy cùng tìm hiểu cách chỉnh sửa chúng. Bạn có thể thay đổi các phần tử hiện có, thêm phần tử mới hoặc xóa hẳn các phần tử.
Để thay đổi một phần tử hiện có, hãy dùng dấu ngoặc vuông kép cùng phép gán:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- "world"
print(my_list)Đầu ra:
[[1]]
[1] 10
[[2]]
[1] "world"
[[3]]
[1] TRUEĐể thêm một phần tử mới, chỉ cần gán giá trị cho một chỉ số chưa tồn tại:
my_list <- list(10, "hello")
my_list[[3]] <- FALSE
print(my_list)Đầu ra:
[[1]]
[1] 10
[[2]]
[1] "hello"
[[3]]
[1] FALSEĐể xóa một phần tử, gán NULL cho phần tử đó:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- NULL
print(my_list)Đầu ra:
[[1]]
[1] 10
[[2]]
[1] TRUELưu ý rằng sau khi xóa phần tử thứ hai, các phần tử còn lại dịch chuyển để lấp chỗ trống. Phần tử ở vị trí 3 giờ nằm ở vị trí 2.
Thử thách
DễBạn sẽ nhận ba dòng đầu vào:
- Ba giá trị phân tách bằng dấu phẩy để khởi tạo một danh sách (list), ví dụ:
50,hello,TRUE - Một chỉ số và một giá trị mới, được phân tách bằng dấu phẩy, để sửa đổi, ví dụ:
2,goodbye - Chỉ số của phần tử cần xóa, ví dụ:
3
Thực hiện các thao tác sau:
- Tạo một danh sách gồm ba giá trị ban đầu, chuyển chúng sang kiểu dữ liệu phù hợp: số, ký tự, logic
- In ra danh sách ban đầu
- Sửa đổi phần tử tại chỉ số đã chỉ định bằng giá trị mới, giữ nguyên giá trị đó dưới dạng chuỗi ký tự
- In ra danh sách sau khi sửa đổi
- Thêm phần tử thứ tư có giá trị
999vào danh sách - In ra danh sách sau khi thêm phần tử mới
- Xóa phần tử tại chỉ số đã chỉ định trong dòng đầu vào thứ ba
- In ra danh sách cuối cùng
Ví dụ, nếu đầu vào là:
100,world,FALSE
1,updated
2Đầu ra sẽ là:
[[1]]
[1] 100
[[2]]
[1] "world"
[[3]]
[1] FALSE
[[1]]
[1] "updated"
[[2]]
[1] "world"
[[3]]
[1] FALSE
[[1]]
[1] "updated"
[[2]]
[1] "world"
[[3]]
[1] FALSE
[[4]]
[1] 999
[[1]]
[1] "updated"
[[2]]
[1] FALSE
[[3]]
[1] 999Giải thích:
- Danh sách ban đầu: 100, "world", FALSE
- Sau khi sửa đổi chỉ số 1: "updated", "world", FALSE
- Sau khi thêm phần tử thứ tư: "updated", "world", FALSE, 999
- Sau khi xóa chỉ số 2: "updated", FALSE, 999 (các phần tử còn lại dịch chuyển)
Nhớ dùng dấu ngoặc vuông kép [[ ]] để sửa đổi và gán NULL để xóa phần tử.
Tự làm thử
# Đọc đầu vào
con <- file("stdin", "r")
initial_values <- suppressWarnings(readLines(con, n = 1)) # Ba giá trị phân tách bằng dấu phẩy
modify_input <- suppressWarnings(readLines(con, n = 1)) # Chỉ số và giá trị mới
remove_index <- suppressWarnings(readLines(con, n = 1)) # Chỉ số cần xóa
close(con)
# Phân tích các giá trị ban đầu
values <- strsplit(initial_values, ",")[[1]]
val1 <- as.numeric(values[1])
val2 <- values[2]
val3 <- as.logical(values[3])
# Phân tích đầu vào để sửa đổi
mod_parts <- strsplit(modify_input, ",")[[1]]
mod_index <- as.numeric(mod_parts[1])
mod_value <- mod_parts[2]
# Phân tích chỉ số cần xóa
rem_index <- as.numeric(remove_index)
# TODO: Viết code bên dưới
# 1. Tạo danh sách gồm ba giá trị ban đầu (val1, val2, val3)
# 2. In ra danh sách ban đầu
# 3. Thay phần tử tại chỉ số mod_index bằng mod_value
# 4. In ra danh sách sau khi sửa đổi
# 5. Thêm phần tử thứ tư mới có giá trị 999
# 6. In danh sách sau khi thêm
# 7. Xóa phần tử tại chỉ số rem_index (dùng NULL)
# 8. In danh sách cuối cùngBài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Kiến thức nền tảng
4Toán tử phần 2
Toán tử logic (AND, OR)Toán tử logic phần 2 (NOT)Ôn tập: logic đơn giảnLogic vector hóa phần 1Logic vector hóa phần 22Biến và kiểu dữ liệu
Kiểu dữ liệu sốKiểu dữ liệu số nguyênKiểu dữ liệu ký tựKiểu dữ liệu logicKiểm tra kiểu dữ liệuQuy tắc đặt tênGiá trị thiếu: NATóm tắt: tạo biến8Vòng lặp
Vòng lặp forVòng lặp whileBreakNext (continue)Ôn tập: giai thừaTạo dãy (seq, :)Vòng lặp lồng nhauÔn tập: đầu vào động11Vectơ
Tạo vectơ bằng c()Truy cập phần tử trong vectơChỉnh sửa vectơCác phép toán trên vectơÔn tập: vectơ giáÔn tập: vectơ đảo ngượcVectơ có tên14Danh sách trong R
Tạo danh sáchTruy cập phần tử trong danh sáchChỉnh sửa danh sáchDanh sách có tênÔn tập: Danh sách sản phẩm3Toán tử phần 1
Toán tử số họcPhép chia lấy phần nguyên và phép moduloToán tử gánÔn tập: phép tính đơn giảnToán tử so sánh6Nhập xuất cơ bản
In đầu raDùng cat để in đầu raĐầu ra với biếnĐọc đầu vào bằng readline()Cơ bản về chuyển đổi kiểuÔn tập: máy tính tuổiÔn tập: đúng hay sai9Hàm
Khai báo hàmĐối số hàmGiá trị trả vềÔn tập: hàm SigmaÔn tập: hàm xác thựcGiá trị tham số mặc địnhTự luyện tập: Trình biên dịch R online