访问列表元素
本课属于 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] 会访问它的第二个元素。记住:需要实际内容时使用 [[ ]],需要更小的列表时使用 [ ]。
挑战
简单你会收到两行输入:
- 三个以逗号分隔的不同类型的值(例如,
100,hello,TRUE) - 一个以逗号分隔的数字列表,表示要存储为第四个元素的向量(例如,
5,10,15,20)
执行以下操作:
- 创建一个包含四个元素的列表:数值、文本、逻辑值和数字向量
- 使用双中括号提取并打印第二个元素(文本值)
- 使用单中括号提取第三个元素并打印结果(注意输出格式的区别)
- 使用双中括号访问存储在第四个元素中的向量,然后使用向量索引提取并打印它的第三个值
- 打印第四个元素中所有数字的总和(使用双中括号访问向量,并使用
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]访问向量,然后获取它的第三个元素:24sum(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. 打印第四个元素中所有数字的总和这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: R 在线编译器