我试图理解为什么我的循环没有按预期工作。
我正在尝试编写一个循环,根据它们的索引行将每个变量的数字加在一起。所以 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
非常感谢任何提示。
对于外循环的每次迭代,内循环遍历 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
使用
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
这是我解决的问题,它有不必要的步骤但保留了嵌套的 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])
}
}
}