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 33Như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 33Giá 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 đủ.
Thử thách
DễBạn sẽ nhận được hai dòng đầu vào:
- 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) - 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:
- Tạo một vector số từ các giá trị cơ sở
- Tạo một vector số từ các số nhân
- 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)
- In ra kết quả phép nhân
- Cộng
100và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ị) - In ra kết quả phép cộng
- Trừ vector số nhân khỏi vector giá trị cơ sở
- 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 23Giải thích:
- Phép nhân: Các số nhân
c(3, 7)được tái sử dụng thànhc(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ừ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 27Máy tính chia hóa đơn
Thông báo chào mừngNhận đầu vào từ người dùng13Vectơ nâng cao
Cắt lát và đánh chỉ số vectơĐánh chỉ số logicPhép toán số học và tái chế vectơToán tử %in%2Biế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 địnhTự luyện tập: Trình biên dịch R online