所以我给了这个问题,写一个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循环更改为哪个循环,但我认为这不是必需的吗?
答案 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)
,则会有效。