我正在寻找迭代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=5
和end=3
循环甚至无法启动。
答案 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_len
, seq_along
)您需要担心。