使用 seq() 创建自定义序列
使用 seq() 控制步长、长度和方向
使用 seq() 创建自定义序列 是 CoddyKit 上的免费 R Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 R Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 R Academy 课程共包含 4 节课。
seq() 简介
seq() 是 R 中灵活的序列生成器。: 会以步长 1 创建整数范围,而 seq() 可以让您控制任意数值序列的起点、终点、步长和总长度。
# Basic seq() usage
basic <- seq(1, 10)
cat('seq(1, 10):', basic, '
')
# With step size
by_two <- seq(0, 20, by = 2)
cat('seq(0, 20, by=2):', by_two, '
')seq(from, to, by) — 自定义步长
by 参数设置连续值之间的步长。它可以是任意正数或负数,包括小数。这适合生成非整数间隔的等间距数值。
# Decimal step
celsius <- seq(0, 100, by = 12.5)
cat('Every 12.5 degrees:', celsius, '
')
# Step of 0.1
fine_scale <- seq(1.0, 1.5, by = 0.1)
cat('Fine scale:', fine_scale, '
')
# Negative step (descending)
countdown <- seq(10, 0, by = -2)
cat('Countdown by 2:', countdown, '
')seq(from, to, length.out) — 固定数量
如果您知道需要多少个值,而不是需要多大的步长,请使用 length.out。R 会自动计算步长,使区间均匀分割。
# 5 evenly spaced points between 0 and 1
unit_interval <- seq(0, 1, length.out = 5)
cat('5 points in [0,1]:', unit_interval, '
')
# 7 breakpoints for a histogram
breakpoints <- seq(0, 100, length.out = 7)
cat('Histogram breaks:', breakpoints, '
')
# Step is automatically calculated
step <- (100 - 0) / (7 - 1)
cat('Step size:', step, '
')seq(along.with = x) — 匹配向量
seq(along.with = x) 会生成整数序列 1:length(x),与 seq_along(x) 完全相同。当您想将索引序列与已有向量配对时,这种写法很有用。
rainfall <- c(55.2, 62.1, 48.7, 71.3, 38.9, 90.4, 45.0)
# Generate matching index sequence
idx <- seq(along.with = rainfall)
cat('Indices:', idx, '
')
cat('Rainfall:', rainfall, '
')
# Use to find position of max
cat('Position of max rainfall:', which.max(rainfall), '
')
cat('Max rainfall:', max(rainfall), 'mm
')seq_len(n) — 安全地生成 1 到 n
seq_len(n) 等价于 seq(1, n) 或 1:n,但它能正确处理 n = 0 这一边界情况:此时返回空整数向量,而不是 c(1, 0)。
# Normal use
cat('seq_len(5):', seq_len(5), '
')
# Edge case: n = 0
cat('1:0 :', 1:0, '
') # produces 1 0 (WRONG)
cat('seq_len(0):', seq_len(0), '
') # produces integer(0) (CORRECT)
# In practice: safe loop
my_data <- c() # intentionally empty
for (i in seq_len(length(my_data))) {
cat('Processing item', i, '
')
}
cat('Loop completed without error
')使用 seq() 设置负步长
设置负的 by 值会创建降序序列。使用负步长时,from 必须大于 to,否则 R 会返回警告。
# Countdown from 100 to 0
countdown_100 <- seq(100, 0, by = -10)
cat('Countdown:', countdown_100, '
')
# Temperature drop simulation
start_temp <- 30.0
end_temp <- 15.0
hourly_temps <- seq(start_temp, end_temp, by = -1.5)
cat('Hourly cooling:', hourly_temps, '
')浮点数序列
使用浮点数步长时请务必小心:极小的舍入误差可能导致最后一个值被意外包含或排除。使用 length.out 而不是 by 可以避免此问题。
# Floating point step: may include or exclude endpoint
seq_by <- seq(0, 1, by = 0.1)
cat('By 0.1 (', length(seq_by), 'values):', seq_by, '
')
# length.out: always exactly n values
seq_lo <- seq(0, 1, length.out = 11)
cat('length.out=11:', seq_lo, '
')
# Check: are they the same?
cat('Identical?', identical(seq_by, seq_lo), '
')使用 seq() 设置绘图坐标轴
seq() 的常见用途是为数学函数或坐标轴刻度生成值。它可以让您在一个区间内以固定间隔对函数进行采样。
# Sample a sine wave
x_vals <- seq(0, 2 * pi, length.out = 13)
y_vals <- round(sin(x_vals), 3)
cat('x values (radians):', round(x_vals, 2), '
')
cat('sin(x) values: ', y_vals, '
')
# Find the approximate peak
cat('Peak near x =', round(x_vals[which.max(y_vals)], 3), '
')seq() 与 : 的比较
如果需要步长为 1 的整数,请使用 :。如果需要小数步长、指定数量的值,或需要匹配另一个向量的长度,请使用 seq()。对于简单的整数范围,两者可以生成相同的结果。
# These produce the same integer sequence
a <- 1:5
b <- seq(1, 5)
c_seq <- seq(1, 5, by = 1)
d <- seq(1, 5, length.out = 5)
cat('1:5 :', a, '
')
cat('seq(1,5) :', b, '
')
cat('seq(1,5,by=1) :', c_seq, '
')
cat('seq(1,5,lo=5) :', d, '
')
cat('All identical? :', identical(a, d), '
')实践:生成时间点
seq() 非常适合在数据分析中创建时间轴,例如为时间序列分析生成按月、按季度或按年的时间间隔。
# Monthly data points (as numeric month indices)
months_idx <- seq(1, 12, by = 1)
month_names <- month.abb # built-in R constant
cat('Month indices:', months_idx, '
')
cat('Month names :', month_names, '
')
# Quarterly: every 3 months
quarters <- seq(1, 12, by = 3)
cat('Quarter starts:', quarters, '
')
cat('Quarter names :', month_names[quarters], '
')seq() 参数概览
以下是 seq() 参数的快速参考:
from— 起始值(默认为 1)to— 结束值(默认为 1)by— 值之间的步长length.out— 要生成的确切值数量along.with— 匹配另一个向量的长度
应只提供 by 或 length.out 其中一个。
# Five different forms of seq()
cat('seq(5) :', seq(5), '
')
cat('seq(2, 10) :', seq(2, 10), '
')
cat('seq(0, 1, by=0.25) :', seq(0, 1, by = 0.25), '
')
cat('seq(0, 1, length.out=5):', seq(0, 1, length.out = 5), '
')
cat('seq(along.with=1:4) :', seq(along.with = 1:4), '
')快速检查
seq(0, 1, length.out = 6) 会生成多少个值?
回顾:使用 seq() 创建自定义序列
做得很好!本课的要点如下:
seq(from, to, by)— 创建步长固定的序列seq(from, to, length.out = n)— 创建恰好包含 n 个、间距相等的值seq(along.with = x)— 生成与向量 x 匹配的索引seq_len(n)— 1:n 的安全版本(可处理 n=0)- 对于浮点数序列,优先使用
length.out而不是by,以避免舍入问题 - 当
:无法满足需求时(例如需要非整数步长或固定数量),请使用seq()
# Final demo: all seq() forms
cat('Even 0-10: ', seq(0, 10, by = 2), '
')
cat('5 in [0,1]: ', seq(0, 1, length.out = 5), '
')
cat('Match 3-elem: ', seq(along.with = c('a', 'b', 'c')), '
')
cat('Safe 1:0: ', seq_len(0), '(empty)
')常见问题解答
「使用 seq() 创建自定义序列」课时是免费的吗?
是的 — 「使用 seq() 创建自定义序列」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 R Academy 课程的其余内容,请升级到 CoddyKit PRO。 R Academy 课程共包含 4 节课。
「使用 seq() 创建自定义序列」这节课中我会学到什么?
使用 seq() 控制步长、长度和方向 你通过在浏览器中直接运行的动手代码来练习 R Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 R Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 R Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「使用 seq() 创建自定义序列」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 R Academy 课中编写并运行代码吗?
能。每节 R Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 用于整数范围的冒号运算符
- 使用 seq() 创建自定义序列
- 使用 rep() 重复值
- 命名向量与命名序列