使用 for 循环迭代的最佳方法

Best way to iterate using for loop

我正在寻找迭代 R 的最佳方法。我知道简单的解决方案,例如:

times <- 3
for(i in 1:times){

}

但是如果时间 <- 0,那么我的循环迭代两次,而不是零。所以解决方案是:

for(i in seq_len(times))

所以如果我想从 start 迭代到 end :

for(i in seq_len(end - start))

但是如果 end-start < 0 那么:

seq_len(-1)
Error in seq_len(-1) : argument must be coercible to non-negative integer

我知道我可以在循环之前检查是否 end-start < 0,但这不是一个非常干净的解决方案...还有其他想法吗?

澄清一下——我正在寻找类似于其他编程语言的解决方案,例如 C++/Java:

for(int i = start; i < end; i++)

所以如果 start=5end=3 循环甚至没有开始。

鉴于上面的示例 (C++/Java),您实际上是在查看 while 循环。

复制你的例子:

start = 5
end = 3
i <- start

while(i <= end){
  print(i)
  i = i+1
}

这个循环不会开始。请注意 <=,因为 R 是 base-1 索引的。当然你可以只修改索引,但这样更干净。

只需编写自己的辅助函数

loop_seq <- function(start,end) {
    if(end<start) return(integer(0))
    seq(start, end)
}

for(i in loop_seq(3,4)) {print(i)}
# [1] 3
# [1] 4
for(i in loop_seq(3,3)) {print(i)}
# [1] 3
for(i in loop_seq(3,2)) {print(i)}
# {nothing}

for 循环将始终迭代一个向量,所以问题实际上不是 for 循环,而是创建正确的索引向量(:seq_lenseq_along) 你需要担心的。