2016-04-18 1 views
0

это моя проблема:Вложенные для цикла пропускает петли

У меня есть сетка (см график ниже), и мне нужно получить и хранить в списке координаты каждой вершины каждого блока (ячейки). Порядок блоков, которые мне нужны, это «1-1», ... «4-1», «1-2», «4-2». Чтобы это было просто, я сейчас работаю с индексами.

Основываясь на двух векторах с общими координатами между Востоком и Севером, я написал небольшую функцию, которая частично производит вывод, который мне нужен. Он пропускает ячейки «1-2» и «2-2» (см. Вывод ниже). Я не могу понять, где именно ошибка, но я подозреваю, что проблема в моем вложенном цикле. (Есть много вопросов для цикла, но никто не помог мне с моей проблемой).

Любая помощь будет оценена и извиниться, если это слишком просто, чтобы ее попросили.

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

Логика линии polys[[v*k]] <- ... неверно, например, v = 2, k = 1 перепишет v = 1, k = 2. Нет комбинаций v и k, которые составляют 5 или 7, поэтому эти записи пустые.

Я ожидаю, что вы имели в виду, чтобы написать что-то вроде: polys[[v+(k-1)*(length(ys))]] <- ... или polys[[k+(v-1)*(length(xs))]] <- ...

в зависимости от того, что вы хотите, чтобы ваши результаты в