R语言双重for循环中按顺序填充向量问题求助
问题分析与解决
你的代码问题在于两层循环的索引逻辑错误:外层循环的x从1到6,每次内层循环(i从1到6)都在覆盖同一个vec[[x]]的值,相当于每个vec[[x]]被连续赋值6次,最后只保留了i=6时的结果(也就是7)。而vec[[7]]到vec[[36]]完全没被赋值,自然还是初始的空列表元素。
修正方法1:用计数器跟踪位置
添加一个计数器变量,每次内层循环时更新计数器,依次给vec的每个位置赋值:
hr <- seq(0,5,1) hr2 = hr vec <- vector("list", length = length(hr)^2) count <- 1 # 初始化位置计数器 for (x in seq(hr)) { for (i in seq(hr2)) { vec[[count]] <- i + 1 count <- count + 1 # 每次赋值后移动到下一个位置 } } # 如果需要普通向量而非列表,执行这一步 vec <- unlist(vec)
修正方法2:用向量化操作(更高效,推荐)
R擅长向量化操作,完全可以不用循环实现需求:
hr <- seq(0,5,1) hr2 = hr # 生成所有i+1的组合,按行优先展开为向量 vec <- as.vector(outer(hr, hr2, function(x, i) i + 1))
或者用expand.grid生成组合后提取值:
hr <- seq(0,5,1) hr2 = hr # 生成所有x和i的组合 comb_df <- expand.grid(hr, hr2) # 提取第二个变量并加1,得到目标向量 vec <- comb_df$Var2 + 1
内容的提问来源于stack exchange,提问作者Fish_Person
相关产品推荐
相关产品推荐

