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

时间:2015-01-12 16:04:03

标签: r loops for-loop

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

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

}

但是如果时间&lt; - 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循环甚至无法启动。

2 个答案:

答案 0 :(得分:1)

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

复制你的例子:

start = 5
end = 3
i <- start

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

此循环无法启动。请注意<=,假设R是基数为1的索引。当然你可以修改索引,但这更清晰。

答案 1 :(得分: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)您需要担心。