我正在遍历一个向量,我想知道如何基于上一次迭代来“跳过”迭代。
例如:第一个迭代将命中1,然后第二个迭代将命中另一个1,但是如果该数字与先前的数字相同,我想跳过该迭代。
简单的例子:
vector <- c(1, 1, 1, 2, 3, 3, 4)
for (i in vector) {
print(i)
}
我不希望该迭代打印3次。我希望它跳到下一个迭代,直到达到2。这是动态的,因为实际向量要复杂得多。
反之亦然,也许我想执行下一次迭代,前提是之前的迭代是相同的。
答案 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]
}