如何在R语言中实现两个向量两两求和且不覆盖运算结果
解决方法
方法1:修改原有循环(最直接)
你原来的代码错误在于每次循环都用单个值覆盖了向量C,正确的做法是每次将新的求和结果追加到C的末尾:
A = seq(10, 30, 10) B = seq(1, 6, 1) C = c() for (i in B) { for (j in A) { C = c(C, j + i) # 把新结果追加到C后面,而非覆盖原有内容 } }
执行后C会包含所有循环中的求和结果,顺序和你用print输出的完全一致。
方法2:用outer函数转成向量
outer函数可生成两个向量所有元素组合的运算结果(默认返回矩阵),我们只需将矩阵转成向量即可,无需用矩阵存储最终结果:
A = seq(10, 30, 10) B = seq(1, 6, 1) C = as.vector(outer(A, B, "+"))
outer(A, B, "+")生成的矩阵中,每一列对应B的一个元素与所有A元素的和,as.vector按列提取元素后,得到的C顺序和嵌套循环的输出完全匹配。
方法3:用expand.grid生成组合后求和
先通过expand.grid生成A和B所有元素的配对组合,再对每行元素求和:
A = seq(10, 30, 10) B = seq(1, 6, 1) combos = expand.grid(A = A, B = B) C = combos$A + combos$B
expand.grid生成的数据框中,每行是A和B的一组元素配对,求和后得到的C顺序同样符合你的需求。
内容的提问来源于stack exchange,提问作者12666727b9
相关产品推荐
相关产品推荐

