如何在R语言中生成带ID编号的输出并支持结果索引访问
解决你的R语言循环输出与结果存储问题
先帮你梳理下当前代码的问题,再给出针对性的解决方案:
问题根源
你写的循环条件1:length(new_route)-1没加括号,R的运算优先级会先执行1:length(new_route)得到1:4,再给每个元素减1,最终i会取到0,1,2,3。当i=0时,new_route[0]在R中是无效索引,这就导致了多余的[1] 0输出。
另外,你当前每次循环都用a覆盖前一组结果,没法保留所有值供后续用a[1]/a[2]这类方式访问,得先初始化一个存储容器。
修正后的代码方案
方案1:用列表存储结果(灵活通用)
new_route = c(0,4,5,0) # 初始化空列表,长度等于相邻元素对的数量 result_list = vector("list", length(new_route)-1) for (i in 1:(length(new_route)-1)) { current_pair = c(new_route[i], new_route[i+1]) result_list[[i]] = current_pair # 按你期望的格式打印输出 cat(sprintf("[%d] %d %d\n", i, current_pair[1], current_pair[2])) } # 后续访问结果 result_list[[1]] # 得到 [1] 0 4 result_list[[2]] # 得到 [1] 4 5 result_list[[3]] # 得到 [1] 5 0
方案2:用矩阵存储结果(适合结构化数据)
如果你更习惯用矩阵的行列索引访问,也可以这么写:
new_route = c(0,4,5,0) # 创建3行2列的矩阵(3组元素,每组2个值) result_matrix = matrix(nrow = length(new_route)-1, ncol = 2) for (i in 1:(length(new_route)-1)) { result_matrix[i,] = c(new_route[i], new_route[i+1]) cat(sprintf("[%d] %d %d\n", i, result_matrix[i,1], result_matrix[i,2])) } # 后续访问结果 result_matrix[1,] # [1] 0 4 result_matrix[2,] # [1] 4 5 result_matrix[3,] # [1] 5 0
关键修改点说明
- 循环条件改为
1:(length(new_route)-1),确保i只取1,2,3,对应3组合法的相邻元素对; - 提前初始化存储容器(列表/矩阵),避免每次循环覆盖结果,保留所有值供后续调用;
- 用
cat()+sprintf()实现你想要的带序号格式化输出,替代默认的print()输出样式。
运行后输出会和你期望的完全一致,同时可以通过索引轻松访问任意一组结果。
内容的提问来源于stack exchange,提问作者BVS MURTHY
相关产品推荐
相关产品推荐

