Menu
CoddyTech

Phép toán số học và tái chế 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 69 trên 78.

Khi thực hiện các phép toán số học giữa hai vectơ có cùng độ dài, R áp dụng phép toán cho từng phần tử:

a <- c(1, 2, 3)
b <- c(10, 20, 30)
print(a + b)

Đầu ra:

[1] 11 22 33

Nhưng điều gì xảy ra khi các vectơ có độ dài khác nhau? R sử dụng một cách xử lý gọi là lặp lại. Vectơ ngắn hơn được lặp lại để khớp với độ dài của vectơ dài hơn:

numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)

Đầu ra:

[1]  10 200  30 400  50 600

Ở đây, multiplier được tái sử dụng thành c(10, 100, 10, 100, 10, 100) trước khi thực hiện phép nhân. Điều này đặc biệt hữu ích khi thao tác với một giá trị:

prices <- c(10, 20, 30)
print(prices * 1.1)

Đầu ra:

[1] 11 22 33

Giá trị đơn 1.1 được lặp lại để khớp với độ dài của prices. Hãy cẩn thận khi độ dài của vector dài hơn không phải là bội số của vector ngắn hơn, vì R vẫn thực hiện phép toán nhưng có thể đưa ra cảnh báo về việc lặp lại không đầy đủ.

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, đại diện cho các giá trị cơ sở (ví dụ: 10,20,30,40,50,60)
  2. Một danh sách số nhân được phân tách bằng dấu phẩy (ví dụ: 2,5)

Sử dụng phép tính số học trên vector và cơ chế tái sử dụng:

  1. Tạo một vector số từ các giá trị cơ sở
  2. Tạo một vector số từ các số nhân
  3. Nhân các giá trị cơ sở với các số nhân (R sẽ tái sử dụng vector ngắn hơn)
  4. In ra kết quả phép nhân
  5. Cộng 100 vào mỗi phần tử của các giá trị cơ sở ban đầu (tái sử dụng một giá trị)
  6. In ra kết quả phép cộng
  7. Trừ vector số nhân khỏi vector giá trị cơ sở
  8. In ra kết quả phép trừ

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

5,10,15,20,25,30
3,7

Đầu ra sẽ là:

[1]  15  70  45 140  75 210
[1] 105 110 115 120 125 130
[1]  2  3 12 13 22 23

Giải thích:

  • Phép nhân: Các số nhân c(3, 7) được tái sử dụng thành c(3, 7, 3, 7, 3, 7), cho kết quả 5*3, 10*7, 15*3, 20*7, 25*3, 30*7
  • Phép cộng: Giá trị đơn 100 được tái sử dụng để cộng vào mỗi phần tử
  • Phép trừ: Các số nhân được tái sử dụng một lần nữa, cho kết quả 5-3, 10-7, 15-3, 20-7, 25-3, 30-7

Tự làm thử

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

# Chuyển các giá trị phân tách bằng dấu phẩy thành các vectơ số
base_values <- as.numeric(strsplit(base_input, ",")[[1]])
multipliers <- as.numeric(strsplit(multipliers_input, ",")[[1]])

# TODO: Viết code của bạn bên dưới
# 1. Nhân base_values với multipliers (các giá trị sẽ tự động được dùng lại)
# 2. In ra kết quả phép nhân
# 3. Cộng 100 vào từng phần tử của base_values
# 4. In ra kết quả phép cộng
# 5. Lấy base_values trừ đi multipliers
# 6. In ra kết quả phép trừ
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