Вложенный цикл for пропускает циклы

это моя проблема:

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

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

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

введите здесь описание изображения

векторы:

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

person Rafael    schedule 18.04.2016    source источник


Ответы (1)


Логика строки 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))]] <- ...

в зависимости от того, в каком порядке вы хотите получить результаты

person Miff    schedule 18.04.2016