Lặp qua các ký tự (strsplit
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 65 trên 78.
Nếu cần xử lý từng ký tự trong chuỗi riêng lẻ thì sao? Khác với vector, bạn không thể lặp trực tiếp qua các ký tự trong chuỗi bằng R. Hàm (function) strsplit() giải quyết việc này bằng cách tách chuỗi thành một vector ký tự.
Hàm strsplit() nhận hai đối số: chuỗi cần tách và dấu phân cách. Để tách thành từng ký tự riêng lẻ, hãy dùng chuỗi rỗng "" làm dấu phân cách:
word <- "hello"
chars <- strsplit(word, "")[[1]]
print(chars)Đầu ra:
[1] "h" "e" "l" "l" "o"Hãy chú ý đến [[1]] ở cuối. Đó là vì strsplit() trả về một danh sách, và chúng ta cần trích xuất phần tử đầu tiên để lấy mảng ký tự. Khi đã có các ký tự dưới dạng mảng, bạn có thể lặp qua chúng bằng những kỹ thuật bạn đã học:
word <- "R"
chars <- strsplit(word, "")[[1]]
for (char in chars) {
print(char)
}Đầu ra:
[1] "R"Kỹ thuật này rất cần thiết cho các tác vụ như đếm các ký tự cụ thể, đảo ngược chuỗi hoặc xác thực đầu vào theo từng ký tự.
Thử thách
DễBạn sẽ nhận được một dòng đầu vào chứa một từ, ví dụ: programming.
Dùng strsplit() để tách chuỗi (string) thành từng ký tự (character):
- Tách từ đầu vào thành một vector ký tự
- Lặp qua từng ký tự trong vector
- Đếm số lần chữ cái
"a"xuất hiện trong từ (phân biệt chữ hoa và chữ thường) - Dùng
print()để in mỗi ký tự trên một dòng riêng - Sau vòng lặp, dùng
cat()để in số đếm theo định dạng:Count of 'a': X, theo sau là ký tự xuống dòng
Ví dụ, nếu đầu vào là:
bananaĐầu ra sẽ là:
[1] "b"
[1] "a"
[1] "n"
[1] "a"
[1] "n"
[1] "a"
Count of 'a': 3Giải thích: Từ "banana" được tách thành các ký tự c("b", "a", "n", "a", "n", "a"). Mỗi ký tự được in ra, và chữ cái "a" xuất hiện 3 lần.
Tự làm thử
# Đọc đầu vào
con <- file("stdin", "r")
word <- suppressWarnings(readLines(con, n = 1))
# Khởi tạo biến đếm cho chữ cái 'a'
count_a <- 0
# TODO: Viết code bên dưới
# 1. Dùng strsplit() để tách từ thành từng ký tự
# 2. Duyệt qua từng ký tự
# 3. In từng ký tự bằng print()
# 4. Đếm số lần 'a' xuất hiện
# In ra số lần xuất hiện của 'a'
cat("Count of 'a': ", count_a, "\n", sep = "")Bà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 động3Toá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 định12Lặp qua các chuỗi
Lặp qua các phần tử của vectorDùng seq_along()Lặp qua các ký tự (strsplitCác hàm xử lý chuỗiTự luyện tập: Trình biên dịch R online