0Pricing
R Academy · 课时

用于整数范围的冒号运算符

使用冒号运算符快速创建整数序列

用于整数范围的冒号运算符 是 CoddyKit 上的免费 R Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 R Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 R Academy 课程共包含 4 节课。

冒号运算符

: 运算符会生成从起始值到结束值的整数序列,步长为 1(降序时为 -1)。这是在 R 中创建范围最快捷、最简洁的方式。

# Basic integer range
ones_to_ten <- 1:10
cat('1 to 10:', ones_to_ten, '
')

# Descending range
ten_to_one <- 10:1
cat('10 to 1:', ten_to_one, '
')

在 for 循环中使用 :

冒号运算符最常用于 for 循环计数器。它可以直接创建序列,无需额外的变量,让代码保持简洁。

# Classic for loop with colon range
total <- 0
for (i in 1:5) {
  total <- total + i
  cat('i =', i, ', running total =', total, '
')
}
cat('Sum of 1 to 5:', total, '
')

负数和小数范围

: 运算符支持负数,甚至支持小数(不过步长始终为 1 或 -1)。如果起始值等于结束值,它会返回单个值。

# Negative range
neg_range <- -3:3
cat('-3 to 3:', neg_range, '
')

# Range crossing zero
cross_zero <- -5:5
cat('-5 to 5:', cross_zero, '
')

# Single value
cat('5:5 =', 5:5, '
')

# Decimal start (step is still 1)
cat('1.5:5.5 =', 1.5:5.5, '
')

使用 seq_len() 创建安全长度序列

seq_len(n) 会生成序列 1, 2, ..., n。与 1:n 不同,它更加安全:当 n = 0 时,它会返回空向量,而不是 c(1, 0),从而避免循环中的错误。

# Compare 1:n vs seq_len(n) when n = 0
n <- 0
cat('1:0 produces:', 1:n, '(length', length(1:n), ') -- DANGEROUS
')
cat('seq_len(0):', seq_len(n), '(length', length(seq_len(n)), ') -- SAFE
')

# Correct use in a loop
my_vector <- c()  # empty
for (i in seq_len(length(my_vector))) {
  cat('This will not execute
')
}
cat('Loop over empty vector is safe with seq_len
')

使用 seq_along() 创建索引序列

seq_along(x) 会生成序列 1:length(x),即为 x 的每个元素生成一个索引。按索引遍历向量时,这是最安全的方式,因为它能正确处理长度为零的向量。

cities <- c('Tokyo', 'Delhi', 'Shanghai', 'Dhaka', 'Cairo')

# seq_along gives indices 1 to length
cat('Indices:', seq_along(cities), '
')

# Use in loop to access both index and value
for (i in seq_along(cities)) {
  cat(i, ':', cities[i], '
')
}

在向量索引中使用冒号范围

: 运算符经常用于从向量或矩阵中提取切片。这样可以得到一段连续的元素子序列。

temperatures <- c(18.5, 21.0, 23.4, 19.8, 25.1, 22.7, 17.3, 20.0)

# Extract a slice (elements 3 to 6)
midweek <- temperatures[3:6]
cat('Midweek temps:', midweek, '
')

# Last 3 elements
n <- length(temperatures)
cat('Last 3:', temperatures[(n-2):n], '
')

使用冒号反转向量

结合使用 length() 和 : 运算符,可以用一种简单的方式反转向量。使用 rev() 更符合 R 的惯用写法,但冒号方式能展示范围的工作原理。

words <- c('data', 'science', 'with', 'R')
n <- length(words)

# Manual reverse using colon
reversed_idx <- n:1
reversed_words <- words[reversed_idx]
cat('Original:', words, '
')
cat('Reversed:', reversed_words, '
')

# Or simply:
cat('Using rev():', rev(words), '
')

使用 : 创建测试数据

冒号运算符便于快速创建用于探索的测试向量和矩阵。您还可以将它与算术运算结合起来,生成更复杂的测试数据。

# Create a simple test dataset
student_ids <- 101:110
exam_scores <- (1:10) * 8 + 20  # scores: 28, 36, 44, ...

cat('Student IDs:', student_ids, '
')
cat('Exam scores:', exam_scores, '
')
cat('Mean score:', mean(exam_scores), '
')
cat('Passing count:', sum(exam_scores >= 60), '
')

冒号优先级警告

请记住:: 的优先级高于 + 和 -。因此,1:n-1 表示 (1:n) - 1,而不是 1:(n-1)。序列边界中包含算术运算时,请始终使用括号。

n <- 5

# These look similar but produce different results
cat('1:n-1 =', 1:n - 1, '
')   # (1:5)-1 = 0 1 2 3 4
cat('1:(n-1) =', 1:(n - 1), '
') # 1:4 = 1 2 3 4

# Practical: skip last element
v <- c(10, 20, 30, 40, 50)
cat('All but last:', v[1:(length(v) - 1)], '
')

组合多个范围

您可以使用 c() 组合多个范围。这样会创建一个不连续的索引向量,适合选择较大向量中的特定部分。

data_vals <- c(5, 12, 3, 8, 15, 7, 20, 1, 9, 11)

# Select first 3 and last 3
first_and_last <- data_vals[c(1:3, 8:10)]
cat('First 3 and last 3:', first_and_last, '
')

# Skip middle: take 1:3 and 7:10
outer <- data_vals[c(1:3, 7:10)]
cat('Outer elements:', outer, '
')

整数范围:总结

冒号运算符及其相关工具是 R 中不可或缺的工具:

  • a:b — 从 a 到 b 的整数序列(步长为 1 或 -1)
  • seq_len(n) — 1:n 的安全版本(可处理 n=0)
  • seq_along(x) — 针对向量 x 的安全索引序列
  • 请使用括号:1:(n+1),而不是 1:n+1
  • 非常适合用作循环计数器、切片和快速创建测试数据
# All three in action
x <- c(100, 200, 300, 400, 500)
cat('1:5         :', 1:5, '
')
cat('seq_len(5)  :', seq_len(5), '
')
cat('seq_along(x):', seq_along(x), '
')
cat('x[2:4]      :', x[2:4], '
')

快速检查

当 n = 4 时,1:n + 1 会生成什么?

回顾:冒号运算符

做得很好!以下是本课的要点:

  • a:b 会创建从 a 到 b 的整数序列,步长为 1(降序时为 -1)
  • 当 n 可能为 0 时,请使用 seq_len(n),而不是 1:n
  • 在循环中遍历向量索引时,请使用 seq_along(x),以确保安全
  • 冒号 : 的优先级高于 +/-,因此算术运算边界必须加括号
  • 可以使用 c() 组合范围,从而进行不连续切片
# Safe loop pattern with seq_along
months <- c('Jan', 'Feb', 'Mar', 'Apr', 'May')
days <- c(31, 28, 31, 30, 31)

for (i in seq_along(months)) {
  cat(months[i], ':', days[i], 'days
')
}

常见问题解答

「用于整数范围的冒号运算符」课时是免费的吗?

是的 — 「用于整数范围的冒号运算符」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 R Academy 课程的其余内容,请升级到 CoddyKit PRO。 R Academy 课程共包含 4 节课。

「用于整数范围的冒号运算符」这节课中我会学到什么?

使用冒号运算符快速创建整数序列 你通过在浏览器中直接运行的动手代码来练习 R Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 R Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 R Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「用于整数范围的冒号运算符」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 R Academy 课中编写并运行代码吗?

能。每节 R Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 用于整数范围的冒号运算符
  2. 使用 seq() 创建自定义序列
  3. 使用 rep() 重复值
  4. 命名向量与命名序列
← 返回 R Academy