在R中编程简单模拟

时间:2013-11-30 18:38:05

标签: r loops repeat random-sample control-structure

根据@agstudy

编辑此帖子以简化

我正在尝试使用随机均匀分布来开发模拟聚合物的模型。

模型有2个状态

状态1(如果在状态2中状态1的概率是.003): 增长概率,A = .01 收缩概率,B = .0025

状态2(如果在状态1中状态2的概率是.0003): 增长概率,A = .01 收缩概率,E = .05

模拟从状态1开始

在状态1中,从data.frame1中采样随机数,如果#< .0025在data.frame2中输入-1,如果#< .01在data.frame2中输入+1,如果data.frame2中都没有输入0。继续直到达到#< .0003(进入状态1的概率)

如果#< .0003被采样,输入-1到data.frame2,并切换到状态2.继续采样随机数,而在状态2,如果#< .003输入+1到data.frame2并切换到状态1并按上述方式继续。如果在状态2中#> = .003,并且如果#< .05输入-1到data.frame2,否则输入0在data.frame2

我希望这可以解决问题@agstudy,但有可能不会......对不起,如果是这样的话。

这是一个在excel中生成的小集应该如何生成的示例

第一列将来自data.frame1,输入列将是data.frame2,i包含州和长度列以供说明。

    rnumbers  state input length
    0           1   0   0 # initialized state
    0.009413895 1   1   1
    0.052959306 1   1   2
    0.002453354 1   -1  1
    0.000290324 2   -1  0
    0.093312954 2   0   0
    0.077210941 2   0   0
    0.04924944  2   -1  -1
    0.010590107 2   -1  -2
    0.03308292  2   -1  -3
    0.037239807 2   -1  -4
    0.007889393 2   -1  -5
    0.026476751 2   -1  -6
    0.000454509 1   1   -5
    0.009820683 1   1   -4
    0.019836999 1   1   -3
    0.009380381 1   1   -2
    0.083149383 1   1   -1
    0.022212547 1   1   0
    0.051917035 1   1   1
    0.05032031  1   1   2
    0.03956718  1   1   3
    0.032664445 1   1   4
    0.004352291 1   1   5
    0.08902418  1   1   6
    0.095643962 1   1   7

1 个答案:

答案 0 :(得分:0)

我会写这样的东西:

step_generator <- function(rnum)
   ifelse(rnum<C,
       ifelse(rnum>=D,-5,ifelse(rnum<B,-1,ifelse(rnum<A,1,0))),
       ifelse(rnum<B,-1,ifelse(rnum<A,1,0)))