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
我有一个向量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