R中是否有一种优雅的方法可以跳过空元素的for循环?

时间:2019-02-14 17:11:24

标签: r loops for-loop null skip

我想遍历列表并使用其第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

有没有比检查length(l)是否大于零更好的跳过for循环的方法?

1 个答案:

答案 0 :(得分:2)

您偶然发现了R中的“最佳实践”课程。通常,人们建议您将for循环编写为

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,则将返回错误,这通常是您想要的。