Menu
CoddyTech

Cắt lát và đánh chỉ số vectơ

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

Bạn đã học cách truy cập từng phần tử riêng lẻ và lặp qua các vectơ (vector). Giờ hãy cùng khám phá cách trích xuất nhiều phần tử cùng lúc bằng cách cắt lát (slicing). Kỹ thuật này cho phép bạn lấy một tập con của vectơ chỉ trong một thao tác.

Để trích xuất nhiều phần tử, hãy truyền một vector chỉ số bên trong dấu ngoặc vuông:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)])

Đầu ra:

[1] 10 30 50

Bạn cũng có thể dùng toán tử dấu hai chấm để chọn một dải phần tử liên tiếp:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4])

Đầu ra:

[1] 20 30 40

Chỉ số âm trong R rất hữu ích. Chúng loại trừ các phần tử thay vì chọn chúng:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2])

Đầu ra:

[1] 10 30 40 50

Bạn có thể loại trừ nhiều phần tử bằng cách truyền vào một vector gồm các chỉ số âm:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)])

Đầu ra:

[1] 20 30 40

Hãy nhớ: bạn không thể kết hợp chỉ số dương và chỉ số âm trong cùng một phép chọn. R sẽ báo lỗi nếu bạn thử numbers[c(1, -2)].

challenge icon

Thử thách

Dễ

Bạn sẽ nhận được hai dòng đầu vào:

  1. Một danh sách số được phân tách bằng dấu phẩy (ví dụ: 100,200,300,400,500,600,700)
  2. Hai chỉ số được phân tách bằng dấu phẩy, biểu thị phạm vi cần loại trừ (ví dụ: 2,5)

Code ban đầu đã đọc đầu vào và tạo véc-tơ số. In ra chính xác bốn dòng theo thứ tự sau:

  1. In ra các phần tử ở vị trí 1, 3 và 5 bằng cách dùng một véc-tơ chỉ số
  2. In ra các phần tử từ vị trí 2 đến vị trí 4 bằng toán tử hai chấm
  3. In ra véc-tơ sau khi loại trừ phần tử ở chỉ số đầu tiên đã cho (dùng chỉ số âm)
  4. In ra véc-tơ sau khi loại trừ các phần tử từ chỉ số thứ nhất đến chỉ số thứ hai (dùng chỉ số âm với một phạm vi)

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

10,20,30,40,50,60,70
3,5

Đầu ra sẽ là:

[1] 10 30 50
[1] 20 30 40
[1] 10 20 40 50 60 70
[1] 10 20 60 70

Giải thích:

  • Các phần tử ở vị trí 1, 3, 5 là: 10, 30, 50
  • Các phần tử từ vị trí 2 đến 4 là: 20, 30, 40
  • Loại trừ vị trí 3 sẽ cho kết quả: 10, 20, 40, 50, 60, 70
  • Loại trừ các vị trí từ 3 đến 5 sẽ cho kết quả: 10, 20, 60, 70

Tự làm thử

# Đọc đầu vào
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
indices_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# Chuyển các số phân tách bằng dấu phẩy thành một vectơ số
numbers <- as.numeric(strsplit(numbers_input, ",")[[1]])

# Chuyển hai chỉ số thành số
indices <- as.numeric(strsplit(indices_input, ",")[[1]])
idx1 <- indices[1]
idx2 <- indices[2]

# TODO: Viết code của bạn bên dưới
# 1. In ra các phần tử ở vị trí 1, 3 và 5 bằng một vectơ chỉ số

# 2. In ra các phần tử từ vị trí 2 đến vị trí 4 bằng toán tử dấu hai chấm

# 3. In ra vectơ sau khi loại phần tử tại idx1 (dùng chỉ số âm)

# 4. In ra vectơ sau khi loại các phần tử từ idx1 đến idx2 (dùng dải chỉ số âm)
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