r - 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 循环?
解决方案
您偶然发现了 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
,这通常是你想要的。
推荐阅读
- node.js - 错误:在 create-react-app 中生成 cmd ENOENT
- postgresql - 如何检查 docker 卷中的 postgres 数据库?
- arangodb - 在遍历中使用两个 ArangoSearch 视图
- java - 如何从 Picasso 的 URL 接收图标并在第一次访问而不是重新运行应用程序时显示它?
- r - 应用返回奇怪的结果
- scikit-learn - 如何获得单个数据条目的预测
- anaconda - 如何在 conda 中使用 scp 命令
- javascript - 如何检查某个用户的某个频道/角色
- apache - XAMPP 虚拟主机无法在 Windows 10 上运行
- jsf - 无法更改页面 p:dataTable