Lặp qua các phần tử của vector
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 63 trên 78.
Dù các phép toán vector hóa của R rất mạnh mẽ, đôi khi bạn cần xử lý từng phần tử bằng logic tùy chỉnh. Vòng lặp for cho phép bạn lần lượt duyệt qua từng phần tử trong mảng.
Cách đơn giản nhất để lặp qua một vector là duyệt trực tiếp qua các phần tử của nó:
fruits <- c("apple", "banana", "cherry")
for (fruit in fruits) {
print(fruit)
}Đầu ra:
[1] "apple"
[1] "banana"
[1] "cherry"Trong mỗi lần lặp, biến vòng lặp fruit nhận giá trị của phần tử tiếp theo trong vector. Cách này gọn gàng và dễ đọc khi bạn chỉ cần các giá trị.
Bạn có thể kết hợp lần lặp với logic điều kiện để xử lý có chọn lọc các phần tử:
numbers <- c(3, 8, 2, 10, 5)
for (num in numbers) {
if (num > 5) {
print(num)
}
}Đầu ra:
[1] 8
[1] 10Mẫu này hữu ích khi bạn cần áp dụng các thao tác khác nhau dựa trên giá trị của từng phần tử, điều mà chỉ các thao tác vector hóa không phải lúc nào cũng xử lý được.
Thử thách
DễBạn sẽ nhận hai dòng đầu vào:
- Một danh sách số được phân tách bằng dấu phẩy (ví dụ:
12,5,18,3,25,8,14) - Một giá trị ngưỡng (ví dụ:
10)
Dùng vòng lặp for để lặp qua các phần tử của vector:
- Tạo một vector từ các số được phân tách bằng dấu phẩy
- Lặp qua từng phần tử trong vector
- Với mỗi phần tử lớn hơn hoặc bằng ngưỡng, in ra phần tử đó bằng
print()
Ví dụ, nếu đầu vào là:
4,15,8,22,6,19,11
10Đầu ra cần là:
[1] 15
[1] 22
[1] 19
[1] 11Giải thích: Vòng lặp so sánh từng phần tử với ngưỡng (10). Các phần tử 15, 22, 19 và 11 đều lớn hơn hoặc bằng 10, nên chúng được in ra. Các phần tử 4, 8 và 6 bị bỏ qua.
Tự làm thử
# Đọc đầu vào
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
threshold <- as.numeric(suppressWarnings(readLines(con, n = 1)))
close(con)
# Chuyển chuỗi phân tách bằng dấu phẩy thành vectơ số
numbers <- as.numeric(unlist(strsplit(numbers_input, ",")))
# TODO: Viết code bên dưới
# Dùng vòng lặp for để duyệt vectơ numbers
# Với mỗi phần tử >= threshold, in ra bằng print()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