R:在条件和调整向量大小下求和向量的值

R: sum vector's value under condition and resize vector

我有一个向量Pn

Pn<-c(10,6,7,5,8,1,2,2,3)

我需要对值求和直到结果为 >= 5 并删除我求和的值。在这种情况下,我需要向量变为:

Pn= 10,6,7,5,8,1+2+2=5,3 

最后一个值(3)可以,因为不可能再做其他的。我正在尝试使用 for 循环和 while 循环,但我遇到了一个问题,因为长度 (Pn) 减少了它的维度

for (i in 1:(length(Pn)-1)) {
  if (Pn[i]<5) {
    j=i
    while (Pn[j]<5 | j==length(Pn)) {
      Pn[j]<-Pn[j]+Pn[j+1]
      Pn=Pn[-(j+1)]
    }
  }
}

有没有不用循环就能解决我问题的函数?

虽然大多数 R 人讨厌循环,但这里有一个循环解决方案:

Pn<-c(10,6,7,5,8,1,2,2,3)

newPn <- vector()
while (length(Pn)>0)
{
  a <- 0
  while (a<5)
  {
    a <- a+Pn[1]
    Pn <- Pn[-1]
    if (length(Pn)==0) {break}
  }
  newPn <- c(newPn,a)
}

结果:

> newPn
[1] 10  6  7  5  8  5  3

一个更长的例子: 输入:

 [1]  8  6  5  5  9  3  4  5 10  7  4  6  5  2  3  2  2  5  6  3  7  4 10  2  9  8  8  9 10  6

输出:

 [1]  8  6  5  5  9  7  5 10  7 10  5  5  9  6 10 14 11  8  8  9 10  6