您可以按如下方式对其进行矢量化
(Y - 1) * gridsize + ifelse(Y %% 2 == 1, round(Xcells), ceiling(Xcells)) # [1] 1 2 3 16
(我不确定预先计算 round(Xcells) 和 ceiling(Xcells) 会改善这一点 - 你可以尝试)
round(Xcells)
ceiling(Xcells)
另一种选择(如果你想避免的话) ifelse ) 可能
ifelse
(Y - 1) * gridsize + cbind(ceiling(Xcells), round(Xcells))[cbind(1:length(Xcells), Y %% 2 + 1)] # [1] 1 2 3 16