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

Is there an elegant way in R to skip a for loop over an empty element?

我想遍历列表并处理它的第 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 循环?

您偶然发现了 "best practice" R 课程。通常,人们建议您将 for 循环编写为

for (i in seq_along(obj))

而不是

for (i in 1:length(obj))

正是因为这个原因。 seq_along(list()) 将 return integer(0),完全跳过循环。

如果只有长度,也有seq_len的选项,可能为零:

for (i in seq_len(x))

其中 seq_len() 会在 x = 0 时做正确的事情,而 return 会在 x <0 时出错,这通常是您想要的。