2016-04-18 6 views
0

をループします。私が必要とするブロックの順序は、 '1-1'、... '4-1'、 '1-2'、... '4-2'です。それを単純に保つために、私は今インデックスを使って作業しています。ネストされたforループスキップして、これは私の問題である

東と北の共通の座標を持つ2つのベクトルに基づいて、私は必要な出力を部分的に生成する少しの関数を書いています。セル '1-2'と '2-2'をスキップしています(下の出力を参照)。私はどこにエラーがあるのか​​正確には分かりませんが、問題は自分のネストされたforループにあると思われます。 (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を上書きします。 5と7を作るvとkの組み合わせはないので、これらの項目は空です。

私はあなたが何か書くことを意味していることを期待

:あなたは

であなたの結果が欲しいというオーダーに応じて polys[[v+(k-1)*(length(ys))]] <- ... または polys[[k+(v-1)*(length(xs))]] <- ...

関連する問題