[英]Having trouble with nested loops (R)
我編寫了這個嵌套循環,以便在內部循環中,代碼貫穿第一行; 然后,外層更新循環以允許內層運行通過第二行(依此類推)。 數據來自矩陣“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
我不太確定您打算在這里做什么,但這里有一些建議和代碼編輯:
建議:
x[i, j]
,請將其存儲在一個變量中,然后在您的結果中使用此變量。將這些合並到您的代碼中,我相信您正在尋找
for(i in 1:rodadas) {
for(j in 2:n) {
x1 = supergerador[i, j]
x2 = supergerador[i, j - 1]
if(j >= 10) {
vec[f] = min(x1 - x2, 1 - x1)
}
else {
vec[f] = min(x1 - x2, supergerador[i, j + 1] - x1)
}
}
}
在這里,我假設您希望將每一行的列循環到rodadas
。
一旦您對 R 更加熟悉,您應該研究一下矢量化。 對您的問題有了更多了解,我們應該可以很容易地向量化您的第二個 for 循環,刪除您的if
語句並在 1 次快速掃描中執行計算。 但在那之前,這是一個開始您的編程體驗的好地方,並且對for-loops
有深刻的理解對於任何語言都至關重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.