小编Pie*_*t93的帖子

矢量化六边形网格中单元格数的计算

我知道在R中使用for-loop通常是不必要的,因为它支持向量化.我想尽可能高效地编程,有关以下示例代码的问题.

我有一个六边形网格,我正在计算单元格的数量,在我的例子中,从左下角开始,从1到225计数,向右移动.因此,单元格16在单元格1的正上方放置了一点偏移.请参阅快照: 我正在使用的网格示例

因此,如果我有Y坐标,则X坐标必须是圆形或天花板.在我的应用程序中,用户指出单元格,我保存它并在for循环中通过单元格确定他选择的单元格如下,用户可能选择的Xcells和Ycells的玩具输入值:

gridsize <- 15 

 Xcells <-c(0.8066765, 1.8209879, 3.0526517, 0.5893240)
 Ycells <-c(0.4577802, 0.4577802, 0.5302311, 1.5445425)

 clicks <- length(Xcells)
 cells <-vector('list', clicks)
Run Code Online (Sandbox Code Playgroud)

这对应于单元格1 2 3和16 4.单击.现在确定细胞数量:

  Y <- ceiling(Ycells)
      for(i in 1:clicks){
        if(Y[i]%%2==1){
           X[i] <- round(Xcells[i])
        }
      else{
         X[i]<- ceiling(Xcells[i])
         }

      #determine the cell numbers and store in predefined list
      cells[[i]] <- (Y[i]-1)*gridsize + X[i]
       }
Run Code Online (Sandbox Code Playgroud)

因此,如果Y是'偶数',则X必须舍入,如果Y是'un-even',则必须是最大值.

有没有办法在没有for循环的情况下使用矢量化?

for-loop r vectorization

5
推荐指数
1
解决办法
72
查看次数

标签 统计

for-loop ×1

r ×1

vectorization ×1