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

问题描述 投票:1回答:1

这个问题在这里已有答案:

我想循环遍历列表并使用其第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 loops for-loop null skip
1个回答
2
投票

你偶然发现了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将返回错误,这通常是你想要的。

© www.soinside.com 2019 - 2024. All rights reserved.