首页 > 解决方案 > R中是否有一种优雅的方式可以跳过空元素的for循环?

问题描述

我想遍历一个列表并使用它的第 n 个元素,但列表可以为空:

l <- list()
for(i in 1:length(l)) a <- l[[i]]

如果列表有 1 个元素,一切都很好。但是如果列表为空,length(l) 等于 0,因此循环将尝试运行两次并将 i 从 1 倒数到 0。这会引发错误,因为l[[1]]不存在:

> Error in l[[i]] : subscript out of bounds

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

标签: rloopsfor-loopnullskip

解决方案


您偶然发现了 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))

whereseq_len()会在什么时候做正确的事情,x = 0并且会返回一个错误 if x <0,这通常是你想要的。


推荐阅读