使用 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=5
和 end=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_len
、seq_along
) 你需要担心的。
我正在寻找迭代 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=5
和 end=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_len
、seq_along
) 你需要担心的。