【发布时间】:2015-10-27 23:03:34
【问题描述】:
我有一个向量 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)]
}
}
}
有没有一个函数可以在没有循环的情况下解决我的问题?
【问题讨论】:
-
有多种方法可以使输入向量的总和为 5。你是选第一个来的,还是随便选一个?
-
我不想要一个 5 的通用总和。我希望所有单个值都必须小于 5。所以我扫描每个单个值,如果它小于 5,那么我与下一个值相加直到小于 5。然后必须删除总和值
-
在您的输入向量中,如果您从第一个条目开始,
sum(10) >= 5那么它不应该在那里结束吗?是什么决定了它的1+2+2被求和,而不是任何其他方式你可以对该向量的条目求和以获得高于 5 的值? -
这个想法是我从第一个索引扫描向量到最后一个索引。当我的值 = 5(在本例中为索引号 7 和 8)。所以我想删除总和的值(在索引号 7 和 8 处)并继续扫描其他索引
-
我认为您可以使用循环,但需要使用
c()而不仅仅是替换。所以像c(Pn[1:(i-1)], Pn[j] + Pn[j+1], Pn[(j+2):length(Pn)].