Menu
CoddyTech

向量切片与索引

本课属于 Coddy R 学习旅程的“基础知识”单元。第 67 课,共 78 课。

你已经学会了如何访问单个元素,以及如何遍历向量。现在,我们来看看如何使用切片一次提取多个元素。这种方法可以让你通过一次操作获取向量的一个子集。

要提取多个元素,请在方括号内传入一个索引向量:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)])

输出:

[1] 10 30 50

你还可以使用冒号运算符选择一段连续的元素:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4])

输出:

[1] 20 30 40

负索引在 R 中很有用。它们可以排除元素,而不是选取元素:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2])

输出:

[1] 10 30 40 50

你可以通过传入一个由负索引组成的向量来排除多个元素:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)])

输出:

[1] 20 30 40

请记住:在同一次选取中,不能混用正索引和负索引。如果你尝试使用 numbers[c(1, -2)],R 会报错。

challenge icon

挑战

简单

你会收到两行输入:

  1. 以逗号分隔的数字列表(例如,100,200,300,400,500,600,700)
  2. 两个用逗号分隔的索引,表示要排除的范围(例如,2,5)

起始代码已经读取输入并创建了数值向量。请按以下顺序准确打印四行:

  1. 使用索引向量打印位置 1、3 和 5 的元素
  2. 使用冒号运算符打印位置 2 到位置 4 的元素
  3. 打印排除第一个给定索引处元素后的向量(使用负索引)
  4. 打印排除从第一个索引到第二个索引处元素后的向量(使用负索引和范围)

例如,如果输入是:

10,20,30,40,50,60,70
3,5

输出应为:

[1] 10 30 50
[1] 20 30 40
[1] 10 20 40 50 60 70
[1] 10 20 60 70

说明:

  • 位置 1、3、5 处的元素是:10、30、50
  • 位置 2 到 4 处的元素是:20、30、40
  • 排除位置 3 后得到:10、20、40、50、60、70
  • 排除位置 3 到 5 后得到:10、20、60、70

亲手试试

# 读取输入
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
indices_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# 将以逗号分隔的数字解析为数值向量
numbers <- as.numeric(strsplit(numbers_input, ",")[[1]])

# 解析两个索引
indices <- as.numeric(strsplit(indices_input, ",")[[1]])
idx1 <- indices[1]
idx2 <- indices[2]

# TODO: 在下方编写代码
# 1. 使用索引向量打印位置 1、3 和 5 的元素

# 2. 使用冒号运算符打印位置 2 到 4 的元素

# 3. 打印排除 idx1 位置元素后的向量(负索引)

# 4. 打印排除 idx1 到 idx2 位置元素后的向量(使用范围进行负索引)
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: R 在线编译器