Menu
CoddyTech

访问列表元素

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

与向量相比,访问列表元素的语法有所不同。关键区别在于单层方括号 [ ] 和双层方括号 [[ ]]。

双层方括号可以从列表中提取实际元素:

my_list <- list(42, "hello", TRUE)
print(my_list[[1]])

输出:

[1] 42

单层方括号返回的是包含该元素的子列表,而不是元素本身:

my_list <- list(42, "hello", TRUE)
print(my_list[1])

输出:

[[1]]
[1] 42

如果你想处理实际的值,这个区别就很重要。如果列表元素是一个向量,双层方括号可以让你直接访问它,然后使用向量索引:

my_list <- list(c(10, 20, 30), "text")
print(my_list[[1]][2])

输出:

[1] 20

这里,my_list[[1]] 会获取向量,而 [2] 会访问它的第二个元素。记住:需要实际内容时使用 [[ ]],需要更小的列表时使用 [ ]。

challenge icon

挑战

简单

你会收到两行输入:

  1. 三个以逗号分隔的不同类型的值(例如,100,hello,TRUE)
  2. 一个以逗号分隔的数字列表,表示要存储为第四个元素的向量(例如,5,10,15,20)

执行以下操作:

  1. 创建一个包含四个元素的列表:数值、文本、逻辑值和数字向量
  2. 使用双中括号提取并打印第二个元素(文本值)
  3. 使用单中括号提取第三个元素并打印结果(注意输出格式的区别)
  4. 使用双中括号访问存储在第四个元素中的向量,然后使用向量索引提取并打印它的第三个值
  5. 打印第四个元素中所有数字的总和(使用双中括号访问向量,并使用 sum())

例如,如果输入是:

42,world,FALSE
8,16,24,32,40

输出应为:

[1] "world"
[[1]]
[1] FALSE

[1] 24
[1] 120

解释:

  • my_list[[2]]提取实际的文本值:"world"
  • my_list[3]返回一个包含 FALSE 的子列表(注意输出中的 [[1]])
  • my_list[[4]][3]访问向量,然后获取它的第三个元素:24
  • sum(my_list[[4]])计算 8+16+24+32+40 = 120

亲手试试

# 读取输入
con <- file("stdin", "r")
input1 <- suppressWarnings(readLines(con, n = 1))  # 第一行:3 个用逗号分隔的值
input2 <- suppressWarnings(readLines(con, n = 1))  # 第二行:用逗号分隔的数字,用于构成向量
close(con)

# 将第一行输入解析为单独的值
values <- strsplit(input1, ",")[[1]]
numeric_val <- as.numeric(values[1])
text_val <- values[2]
logical_val <- as.logical(values[3])

# 将第二行输入解析为数值向量
vector_val <- as.numeric(strsplit(input2, ",")[[1]])

# TODO: 在下方编写你的代码
# 1. 创建一个包含 4 个元素的列表:numeric_val、text_val、logical_val 和 vector_val
# 2. 使用双中括号 [[ ]] 提取并打印第二个元素
# 3. 使用单中括号 [ ] 提取第三个元素并打印
# 4. 使用双中括号访问第四个元素,然后提取其中的第三个值
# 5. 打印第四个元素中所有数字的总和
quiz icon自我测试

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

基础知识中的所有课

自己练习: R 在线编译器