这个问题在这里已有答案:
我想循环遍历列表并使用其第n个元素,但列表可以为空:
l <- list()
for(i in 1:length(l)) a <- l[[i]]
如果列表有1个元素,一切都很好。但是如果列表为空,则length(l)等于零,因此循环将尝试运行两次并将i从1倒数到0.这会引发错误,因为l[[1]]
不存在:
> Error in l[[i]] : subscript out of bounds
是否有更好的方法来跳过for循环而不是检查长度(l)是否大于零?
你偶然发现了R中的“最佳实践”课程。一般来说,人们建议你为循环编写
for (i in seq_along(obj))
而不是
for (i in 1:length(obj))
正是出于这个原因。 seq_along(list())
将返回integer(0)
,完全跳过循环。
如果您只有长度,也可以选择seq_len
:
for (i in seq_len(x))
其中seq_len()
将在x = 0
做正确的事情,如果x <0
将返回错误,这通常是你想要的。