gpt4 book ai didi

r - R防止 “for”循环反向迭代

转载 作者:行者123 更新时间:2023-12-02 05:33:50 26 4
gpt4 key购买 nike

考虑下面的代码:

foo = list("First List", 1, 2, 3)
bar = function(x) {
cat("The list name is:", x[[1]], "\nThe items are:\n")
for (i in 2:length(x))
cat(x[[i]], "\n")
}
bar(foo)

结果将是:
The list name is: First List 
The items are:
1
2
3

现在考虑传递一个列表,其中没有项目,但有名称:
baz = list("Second List")
bar(baz)

结果将是:
The list name is: Second List 
The items are:
Error in x[[i]] : subscript out of bounds

该错误是因为 2:length(x)将为后一种情况 c(2, 1)生成一个 bar(baz)序列,因此它尝试访问 baz[2]且它不存在。

如何在R中的 for循环中简单地防止这种不必要的反向迭代?

最佳答案

无需遍历列表索引,只需遍历子列表即可:

> bar = function(x) {
+ cat("The list name is:", x[[1]], "\nThe items are:\n")
+ for (i in x[-1])
+ cat(i, "\n")
+ }

如果列表中只有一个项目,则子列表将为空,并且for循环将被跳过。

编辑:正如GavinSimpson指出的那样,这很好用,因为您的特殊情况实际上并不需要循环索引。如果绝对需要索引,那么您将不得不遍历 seq_along(x[-1])而不是Andrie所示的 x[-1]

关于r - R防止 “for”循环反向迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12972890/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com