2016-04-18 252 views
0

這是我的問題:嵌套for循環跳躍循環

我有一個網格(見下圖),我需要在列表中獲取並存儲每個塊(小區)的每個頂點的座標。我需要的塊的順序是'1-1',...'4-1','1-2',...'4-2'。爲了簡單起見,我現在只是使用索引。

基於具有共同東和北座標的兩個向量,我寫了一個小函數,它部分產生了我需要的輸出。它跳過單元格'1-2'和'2-2'(見下面的輸出)。我看不出錯誤的確切位置,但我懷疑問題出在我的嵌套循環中。 (For循環中有很多問題,但沒有人幫助我解決問題)。

任何幫助將不勝感激,並道歉,如果這太基本不能在這裏問。

enter image description here

載體:

x.breaks <- c(191789.1, 291789.1, 391789.1) 
y.breaks <- c(5172287, 5272287, 5372287, 5472287, 5572287) 

功能:

getting_vertices <- function(x.breaks, y.breaks){ 
    xs <- list() 
    ys <- list() 
    polys <- list() 

    for(i in 1 : (length(x.breaks)-1)){ 
    xs[[i]] <- c(i, i+1 , i+1, i, i) 
    } 

    for(j in 1 : (length(y.breaks)-1)){ 
    ys[[j]] <- c(j, j, j+1, j+1, j) 
    } 

    for(v in 1 : length(sapply(ys, length))){ 
    for(k in 1: length(sapply(xs, length))){ 
     polys[[v*k]] <- cbind(xs[[k]], ys[[v]]) 

    } 
    } 
return(polys) 

} 

getting_vertices(x.breaks, y.breaks) 

輸出(這是部分正確):

[[1]] 
    [,1] [,2] 
[1,] 1 1 
[2,] 2 1 
[3,] 2 2 
[4,] 1 2 
[5,] 1 1 

[[2]] 
    [,1] [,2] 
[1,] 1 2 
[2,] 2 2 
[3,] 2 3 
[4,] 1 3 
[5,] 1 2 

[[3]] 
    [,1] [,2] 
[1,] 1 3 
[2,] 2 3 
[3,] 2 4 
[4,] 1 4 
[5,] 1 3 

[[4]] 
    [,1] [,2] 
[1,] 1 4 
[2,] 2 4 
[3,] 2 5 
[4,] 1 5 
[5,] 1 4 

[[5]] 
NULL 

[[6]] 
    [,1] [,2] 
[1,] 2 3 
[2,] 3 3 
[3,] 3 4 
[4,] 2 4 
[5,] 2 3 

[[7]] 
NULL 

[[8]] 
    [,1] [,2] 
[1,] 2 4 
[2,] 3 4 
[3,] 3 5 
[4,] 2 5 
[5,] 2 4 

回答

2

線背後的邏輯不正確,例如,v = 2,k = 1會覆蓋v = 1,k = 2。 v和k沒有5或7的組合,因此這些條目是空的。

我希望你的意思寫的是這樣的:根據訂單 polys[[v+(k-1)*(length(ys))]] <- ...polys[[k+(v-1)*(length(xs))]] <- ...

要在

您的結果