循环的两个变量陷入内循环

问题描述 投票:0回答:3

我试图理解为什么我的循环没有按预期工作。

我正在尝试编写一个循环,根据它们的索引行将每个变量的数字加在一起。所以 20 + 20 = 40 [两个变量中的第 1 行] 然后是 40 + 29 = 69 [第 2 行] 等等。相反,它似乎将变量 2 中的每个值添加到变量 1 中的第一个值,然后所有变量 2 中的值到变量二的第二个值等

var1 <- c(20,40,60,80)
var2 <- c(20,29,33,34)


for (i in 1:length(var1)) {
  for (j in 1:length(var2)) {
    
    print(var1[i] + var2[j])
  

  }    
}

我得到的输出是:

[1] 40
[1] 49
[1] 53
[1] 54
[1] 60
[1] 69
[1] 73
[1] 74
[1] 80
[1] 89
[1] 93
[1] 94
[1] 100
[1] 109
[1] 113
[1] 114

我想要的是:

[1] 40
[1] 69
[1] 93
[1] 114

非常感谢任何提示。

r for-loop nested-loops
3个回答
1
投票

对于外循环的每次迭代,内循环遍历 var2 的所有元素,从而产生来自 var1 和 var2 的所有元素对的组合。

要获得所需的输出,您不需要嵌套循环。相反,您可以使用单个循环遍历变量的索引并将相应的元素加在一起。

    var1 <- c(20, 40, 60, 80)
var2 <- c(20, 29, 33, 34)

for (i in 1:length(var1)) {
  print(var1[i] + var2[i])
}

输出:

[1] 40
[1] 69
[1] 93
[1] 114

0
投票

使用

purrr

var1 <- c(20,40,60,80)
var2 <- c(20,29,33,34)

purrr::map2(var1,var2, ~.x + .y) |> unlist()

[1]  40  69  93 114

0
投票

这是我解决的问题,它有不必要的步骤但保留了嵌套的 for 循环:

var1 <- c(20,40,60,80)
var2 <- c(20,29,33,34)


for (i in 1:length(var1)) {
  for (j in 1:length(var2)) {
    
    if(j == i) {
      print(var1[i] + var2[j])
    }
    
    
  }    
}
© www.soinside.com 2019 - 2024. All rights reserved.