R中值大于0的随机游走和

时间:2014-03-09 21:37:26

标签: r function random sum

我想编写一个函数,使得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)。

谢谢!

1 个答案:

答案 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