Smo*_*mon 2 null loops for-loop r skip
我想遍历一个列表并使用它的第 n 个元素,但该列表可以为空:
l <- list()
for(i in 1:length(l)) a <- l[[i]]
Run Code Online (Sandbox Code Playgroud)
如果列表有 1 个元素,则一切正常。但如果列表为空,则 length(l) 等于 0,因此循环将尝试运行两次并将 i 从 1 倒数到 0。这会引发错误,因为l[[1]]不存在:
> Error in l[[i]] : subscript out of bounds
Run Code Online (Sandbox Code Playgroud)
有没有比检查 length(l) 是否大于零更好的方法来跳过 for 循环?
您偶然发现了 R 中的“最佳实践”课程。通常,人们建议您将 for 循环编写为
for (i in seq_along(obj))
Run Code Online (Sandbox Code Playgroud)
而不是
for (i in 1:length(obj))
Run Code Online (Sandbox Code Playgroud)
正是因为这个原因。seq_along(list())将返回integer(0),完全跳过循环。
还有的选项seq_len,如果你只拥有长,可以是零:
for (i in seq_len(x))
Run Code Online (Sandbox Code Playgroud)
whereseq_len()将在何时做正确的事情x = 0并且将返回错误 if x <0,这通常是您想要的。