向量运算与循环补齐
本课属于 Coddy R 学习旅程的“基础知识”单元。第 69 课,共 78 课。
对两个长度相同的向量执行算术运算时,R 会逐个元素应用运算:
a <- c(1, 2, 3)
b <- c(10, 20, 30)
print(a + b)输出:
[1] 11 22 33但是,当向量的长度不同时会发生什么?R 会使用一种称为循环补齐的行为。较短的向量会重复,以匹配较长向量的长度:
numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)输出:
[1] 10 200 30 400 50 600这里,multiplier 在乘法运算前被循环复用,变成了 c(10, 100, 10, 100, 10, 100)。这在使用单个值进行运算时尤其有用:
prices <- c(10, 20, 30)
print(prices * 1.1)输出:
[1] 11 22 33单个值 1.1 会被重复使用,以匹配 prices 的长度。如果较长向量的长度不是较短向量长度的倍数,请务必谨慎,因为 R 仍会执行运算,但可能会发出关于不完全循环补齐的警告。
挑战
简单你将收到两行输入:
- 一个以逗号分隔、表示基数值的数字列表(例如,
10,20,30,40,50,60) - 一个以逗号分隔的乘数列表(例如,
2,5)
使用向量运算和循环补齐:
- 根据基数值创建一个数值向量
- 根据乘数创建一个数值向量
- 将基数值乘以乘数(R 会循环使用较短的向量)
- 打印乘法结果
- 将原始基数值中的每个元素加上
100(单个值会循环使用) - 打印加法结果
- 用基数值向量减去乘数向量
- 打印减法结果
例如,如果输入是:
5,10,15,20,25,30
3,7输出应为:
[1] 15 70 45 140 75 210
[1] 105 110 115 120 125 130
[1] 2 3 12 13 22 23说明:
- 乘法:乘数
c(3, 7)会循环使用,变为c(3, 7, 3, 7, 3, 7),结果为5*3, 10*7, 15*3, 20*7, 25*3, 30*7 - 加法:单个值
100会循环使用并加到每个元素上 - 减法:乘数会再次循环使用,结果为
5-3, 10-7, 15-3, 20-7, 25-3, 30-7
亲手试试
# 读取输入
con <- file("stdin", "r")
base_input <- suppressWarnings(readLines(con, n = 1))
multipliers_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# 将逗号分隔的值解析为数值向量
base_values <- as.numeric(strsplit(base_input, ",")[[1]])
multipliers <- as.numeric(strsplit(multipliers_input, ",")[[1]])
# TODO: 在下方编写你的代码
# 1. 将 base_values 乘以 multipliers(会自动循环使用元素)
# 2. 输出乘法结果
# 3. 给 base_values 的每个元素加上 100
# 4. 输出加法结果
# 5. 从 base_values 中减去 multipliers
# 6. 输出减法结果这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: R 在线编译器