r语言 - for 循环,用于查找实际值和下一个值之和大于 x 的位置



我想创建一个迭代向量的 for 循环。一旦它找到一个位置,在该位置和下一个位置的实际值之和在本例中高于 100,它应该打印索引号并中断。

我使用以下示例向量

v <- sample(1:100, 100, replace = TRUE);

到目前为止,我创建了

for (index in 1:length(v)){
if (sum(v[index]+v[index+1]) > 100){
print(sprintf("found in %s", v[index]));
}
if (sum(v[index]+v[index+1]) > 101) break
};

考虑到我正在寻找一个位置加上下一个位置的值,如何确保在打印第一个位置后循环断开(我是在第一个位置还是之后中断,因为它也应该被考虑?

任何意见感谢!

几点评论:

  • 如果要将xy一起添加,可以使用x + ysum(x, y)。如果xy是向量,它们是不同的(试试看!但是,如果xy都是单个值(长度为 1(,则它们是相同的。sum(v[index]+v[index+1])似乎是多余的 - 保持简单并使用其中一个。

  • 如何确保在打印找到第一个位置后循环断开?

    break放在print()之后。

  • 。考虑到我正在寻找一个职位加上下一个职位的价值

    这就是你的if()陈述的作用。因为您同时使用v[index]v[index + 1],您已经在考虑两者。

  • 如果你到达循环的最后一次迭代,其中index = length(v),那么v[index + 1]将给出一个越界错误。因此,您应该只循环到倒数第二个元素。

  • 欢迎来到不需要分号的 R!

因此,清理后的 for 循环可能如下所示:

for (index in 1:(length(v) - 1)){
if (v[index] + v[index + 1] > 100){
print(sprintf("found in %s", v[index]))
break
}
}

你可以在没有循环的情况下做到这一点for

v <- c(23, 45, 67, 33, 45)
which.max(head(v, -1) + tail(v, -1) > 100)
#[1] 2

这将返回总和大于 100 的货币对的第一个索引。


以上变体是:

which.max(v[-1] + v[-length(v)] > 100)
which.max(v + dplyr::lead(v) > 100)
which.max(v + data.table::shift(v, type = 'lead') > 100)
which.max(v + dplyr::lag(v) > 100) - 1
which.max(v + data.table::shift(v) > 100) - 1

相关内容

  • 没有找到相关文章

最新更新