我想编写一个函数,使得rwabovex是大于0的S值之和。(我的S是随机游走模拟)
这是我到目前为止所得到的,但我没有得到正确的输出。你能帮忙吗?
rwabovex=function(n){
if (n <= 0) {
return(cat("n must be greater than 0"))
} else {
S=numeric(n)
S[1] = 0
above = 0
for(i in 2:n) {
step=c(1, -1)
S[i]=S[i-1]+sample(step, 1, prob = c(0.5, 0.5), replace = TRUE)
if (S[i] > 0) {
above = above + S[i]
}
print(above)
}
}
}
例如:如果n = 4且S值为-1,2,1,0,那么“above”应该等于3(因为2和1大于0)。
谢谢!
答案 0 :(得分:2)
首先,您没有使用向量化来计算S
,这会使大型n
的过程变慢。您可以使用cumsum
进行矢量化。其次,您可以使用sum
来计算S
中大于0的值的总和:
rwabovex = function(n) {
step = c(1, -1)
S = c(0, cumsum(sample(step, n-1, prob=c(.5, .5), replace=T)))
print(S)
return(sum(S[S > 0]))
}
set.seed(144)
rwabovex(10)
# [1] 0 -1 0 1 2 1 2 1 2 1
# [1] 10