0

我想在列表上运行一个循环,将第一个元素视为特例。我试过了:

# do stuff for element 1
for (i = 2:length(l)) {
     # do stuff
}

但是如果长度为 1,这会导致问题,因为 2:1 = c(2,1)。编写该代码的最佳方法是什么?

事实上,我希望能够遍历一个列表,例如

for (i = 1:length(l)) {
     # do stuff
}

如果列表为空,则不会产生问题。最好的方法是什么?

4

2 回答 2

1

一种替代方法是使用setdiff

# do stuff for element 1

for(i in setdiff(seq_along(l), 1)) {
   # do stuff
}

或使用tail

# do stuff for element 1

for(i in tail(seq_along(l), -1)) {
   # do stuff
}

或简单地使用:

# do stuff for element 1

for(i in (seq_along(l))[-1]) {
   # do stuff
}

编辑更新的问题:您可以通过执行安全访问索引

for(i in seq_along(l)) {
  # do stuff
}

或直接访问列表中的每个元素

for(elem in l) {
  # do stuff
}
于 2013-05-16T07:35:59.000 回答
0

您可以for直接在列表中执行。

for (i in l[-1]) { ... }
于 2013-05-16T11:32:41.997 回答