使用for和哪个循环将向量拆分并加在一起

时间:2015-08-08 03:29:26

标签: r

所以我给了这个问题,写一个R函数,给定一个向量x和一个值a,找到n的最小值,使得x的前n个元素的总和大于a,或者NA没有这样的n存在,一旦使用了一个循环,也使用了for循环。

nloop=function(x,a){
sum=0
  for (i in 1:length(x))
    sum = sum + x[i]
    if (sum>a)
      end=x[i]
 end

}

但这总是给我矢量中的最后一个值? 而且我想不出如何在不使用for循环的情况下进行哪个循环。我会将if循环更改为哪个循环,但我认为这不是必需的吗?

1 个答案:

答案 0 :(得分:1)

您可以使用cumsum确定向量的累积总和,并使用which来获取超过a的累积总和的索引:

nloop <- function(x, a) {
  w <- which(cumsum(x) > a)
  if (length(w) >= 1) w[1]
  else NA
}
nloop(1:3, 1.5)
# [1] 2
nloop(1:3, 10)
# [1] NA

快速说明,您发布的代码不起作用,因为即使找到感兴趣的索引也不会返回。如果您将end=x[i]替换为return(i),将end替换为return(NA),则会有效。