【问题标题】:Nested for-loop skips loops嵌套的 for 循环跳过循环
【发布时间】:2016-04-18 07:23:50
【问题描述】:

这是我的问题:

我有一个网格(见下图),我需要获取每个块(单元格)的每个顶点的坐标并将其存储在一个列表中。我需要的块的顺序是'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

【问题讨论】:

    标签: r list for-loop nested-loops


    【解决方案1】:

    polys[[v*k]] &lt;- ... 后面的逻辑不正确,例如 v=2, k=1 会覆盖 v=1, k=2。没有 v 和 k 的组合可以得到 5 或 7,因此这些条目是空的。

    我希望您打算编写如下内容: polys[[v+(k-1)*(length(ys))]] &lt;- ... 或者 polys[[k+(v-1)*(length(xs))]] &lt;- ...

    取决于您希望结果的顺序

    【讨论】:

      猜你喜欢
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多