如何根据上次执行的迭代值跳过循环迭代?

时间:2019-12-04 22:07:59

标签: r loops for-loop iteration

我正在遍历一个向量,我想知道如何基于上一次迭代来“跳过”迭代。

例如:第一个迭代将命中1,然后第二个迭代将命中另一个1,但是如果该数字与先前的数字相同,我想跳过该迭代。

简单的例子:

vector <- c(1, 1, 1, 2, 3, 3, 4)

for (i in vector) {
print(i)
}

我不希望该迭代打印3次。我希望它跳到下一个迭代,直到达到2。这是动态的,因为实际向量要复杂得多。

反之亦然,也许我想执行下一次迭代,前提是之前的迭代是相同的。

4 个答案:

答案 0 :(得分:2)

除了unique()之外,这是另一个选择,专门用于查看先前的值,并且可以更概括地说:

j <- ""
for (i in vector) {
  if (i == j) {
    j <- i
    next
  }
  print(i)
  j <- i
}

答案 1 :(得分:1)

如何遍历向量的unique值?

for (i in unique(vector)) {
  print(i)
}
# output
# [1] 1
# [1] 2
# [1] 3
# [1] 4

答案 2 :(得分:1)

rle提供了另一种方法。对于您的示例数据,其性能与unique相同,但在某些其他情况下会有所不同(在某种程度上似乎更符合您的问题描述):

vector <- c(1, 1, 1, 2, 3, 3, 4, 1, 1, 5)
for(i in rle(vector)$values){
    print(i)
}

#output:

[1] 1
[1] 2
[1] 3
[1] 4
[1] 1
[1] 5

答案 3 :(得分:0)

如果要显式查看先前的值

ind <- c(TRUE, vector[-length(vector)] != vector[-1])

print(vector[ind])

# or
for (i in which(ind)){
  vector[i]
 }