Menu
CoddyTech

Dùng seq_along()

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 64 trên 78.

Đôi khi bạn cần cả giá trị của phần tử lẫn vị trí của nó trong vector. Duyệt trực tiếp qua các phần tử tuy gọn nhưng không cho bạn truy cập vào chỉ số. Hàm (function) seq_along() giải quyết vấn đề này bằng cách tạo ra một dãy chỉ số cho bất kỳ vector nào.

Hàm seq_along() trả về một dãy từ 1 đến độ dài của vector:

fruits <- c("apple", "banana", "cherry")
print(seq_along(fruits))

Đầu ra:

[1] 1 2 3

Bằng cách lặp qua các chỉ số này, bạn có thể truy cập cả vị trí lẫn giá trị:

fruits <- c("apple", "banana", "cherry")
for (i in seq_along(fruits)) {
  cat(i, ":", fruits[i], "\n")
}

Đầu ra:

1 : apple 
2 : banana 
3 : cherry

Cách tiếp cận này đặc biệt hữu ích khi bạn cần sửa đổi các phần tử ở vị trí cụ thể hoặc so sánh các phần tử với phần tử liền kề. Dùng seq_along() an toàn hơn 1:length(vec) vì cách này xử lý chính xác các vector rỗng, trả về một dãy rỗng thay vì 1:0.

challenge icon

Thử thách

Dễ

Bạn sẽ nhận một dòng đầu vào gồm các số được phân tách bằng dấu phẩy (ví dụ: 10,20,30,40,50).

Dùng seq_along() để lặp qua véc-tơ kèm theo các chỉ số:

  1. Tạo một véc-tơ từ đầu vào được phân tách bằng dấu phẩy
  2. Lặp qua véc-tơ bằng seq_along() để lấy cả chỉ số và giá trị
  3. Với mỗi phần tử, in ra chỉ số, giá trị và tổng lũy tích đến vị trí đó (tổng của tất cả phần tử từ vị trí 1 đến vị trí hiện tại)

Dùng cat() theo định dạng: Position X: VALUE (Running total: TOTAL), theo sau là một dòng mới.

Ví dụ, nếu đầu vào là:

5,10,15,20

Đầu ra sẽ là:

Position 1: 5 (Running total: 5)
Position 2: 10 (Running total: 15)
Position 3: 15 (Running total: 30)
Position 4: 20 (Running total: 50)

Giải thích: Ở vị trí 1, giá trị là 5 và tổng lũy tích là 5. Ở vị trí 2, giá trị là 10 và tổng lũy tích là 5+10=15. Ở vị trí 3, giá trị là 15 và tổng lũy tích là 5+10+15=30, v.v.

Gợi ý: Dùng sum(vector[1:i]) để tính tổng lũy tích đến vị trí i.

Tự làm thử

# Đọc đầu vào
con <- file("stdin", "r")
input_line <- 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(strsplit(input_line, ",")[[1]])

# TODO: Viết code bên dưới
# Dùng seq_along() để lặp qua vectơ
# Ở mỗi vị trí, in ra chỉ số, giá trị và tổng lũy kế
# Dùng cat() theo định dạng: Position X: VALUE (Running total: TOTAL)\n
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch R online