【发布时间】:2021-01-22 15:56:38
【问题描述】:
我编写了这个嵌套循环,以便在内循环中,代码贯穿第一行;然后,外层更新循环以允许内层运行通过第二行(依此类推)。数据来自矩阵“supergerador”。 “rodadas”是行大小,“n”是列大小。 “vec”是感兴趣的向量。提前谢谢!
编辑:i, j 最初被分配 i = 1, j = 2
for(e in 1:rodadas) {
for(f in 1:(n-1)) {
if(j >= 10) {
vec[f] = min(supergerador[i, j] - supergerador[i, j - 1], 1 - supergerador[i, j])
}
else {
vec[f] = func(i, j)
}
j = j + 1
}
i = i + 1
}
func 定义为
func = function(i, j) {
minf = min(supergerador[i, j] - supergerador[i, j - 1], supergerador[i, j + 1] - supergerador[i, j])
return(minf)
}
作为参考,这是嵌套循环返回的内容。你可以说它只经过了一行。
> vec
[1] 0.127387378 0.068119707 0.043472981 0.043472981 0.027431603 0.027431603
[7] 0.015739046 0.008010766 0.008010766
【问题讨论】:
-
循环的第一次迭代后,您不会重置“i”或“j”的值。您的示例是通过递增“i”或“j”而不使用循环索引“e”和“f”来进行不良编程实践。
-
您的循环遍历了所有行,但您每次都通过内部循环重写
vec。内部循环重新开始分配vec[f]和f = 1, 2, ..., n-1。 -
我对编程真的很陌生,所以我仍然不知道什么是好的和坏的做法,不幸的是。使用您的输入,我设法将嵌套循环简化为: for(i in 1:rodadas) { for(j in 1:(n-1)) { vec[j] = func(i, j) }但是,它仍然只注册第一行。我理解你在第二条评论中所说的,但我不知道如何实现它。
-
我尝试将 vec[i] = func(i, j) 切换为 vec[j] = func(i, j)。它确实会产生大量的数据。这个修改有意义吗?
标签: r nested-loops