2016-04-18 73 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))]] <- ...

要在

您的结果