我现在有个模拟的问题摆在手边,开始想用C解决,后来想能不能用R做呢?

问题是这样的:

在一个10*10的样地中,共100个格子,其中50个随机是物种A,剩的是物种B,在这些格子中随机选一个个体死亡,如果是A,那么还有49/100的概率被A物种顶替这个格子,1-49/100的概率被B替代,这样重复10次

这个用R怎么编,我编了点,编不动了。

再顺便问问,R中有指针么?
why "1-49/100的概率被B替代"

but not   "50/100的概率被B替代"?
我是随便定的,主要意思是,现在A已经死了一个了,那么它被替代的概率就跟它现在的多少有关,它现在就只有49个了,也就是替代的时候跟这个物种当时的个体数目有关。如果第一个死亡的A被B替代了,第二个死亡的还是选A物种,那么第二个空位被A替代的概率就是48/100了,是这么来的。我是这个想法。
这个模拟很容易;不过我想再次证实两点关键的模拟规则:

(1)每次死亡的物种是随机选择的,与它们当前的物种数目无关;

(2)每次替代的物种是基于当前的物种数目的(以该数目为概率选取物种);



如果这两点没有问题的话,那么我估计5行左右的代码就可以完成模拟了,这里是一个图示:
ecol.simu = function(nr = 10, nc = 10, col.sp = c(1, <br />
    2), pch.sp = c(1, 2), col.die = 1, pch.die = 4, cex = 3, <br />
    nmax = 50, interval = 1) {<br />
    x = rep(1:nc, nr)<br />
    y = rep(1:nr, each = nc)<br />
    par(ann = FALSE)<br />
    p = sample(rep(1:2, nr * nc/2), nr * nc)<br />
    for (i in 1:nmax) {<br />
        plot(1:nc, 1:nr, type = "n", xlim = c(0.5, nc + 0.5), <br />
            ylim = c(0.5, nr + 0.5))<br />
        abline(h = 1:nr, v = 1:nc, col = "lightgray", lty = 3)<br />
        points(x, y, col = col.sp[p], pch = pch.sp[p], cex = cex)<br />
        Sys.sleep(interval)<br />
        idx = sample(nr * nc, 1)<br />
        points(x[idx], y[idx], pch = pch.die, col = col.die, <br />
            cex = cex, lwd = 3)<br />
        tbl = as.vector(table(p))<br />
        tbl = tbl + sign(p[idx] - 1.5) * c(1, -1)<br />
        p[idx] = sample(1:2, 1, prob = tbl)<br />
        Sys.sleep(interval)<br />
    }<br />
    p<br />
}<br />
par(mar = c(3, 3, 1, 1))<br />
# 正常的模拟<br />
ecol.simu()<br />
# 让死亡来得更猛烈些吧!!<br />
ecol.simu(col.sp = c(8, 2), pch.sp = c(20, 17), nmax = 1000, <br />
    interval = 0.05) 
另外我想知道模拟的目的是什么、有什么实际意义?如果有的话我想把这个函数收编到animation包中
呵呵,在生态中,现在比较热的中性理论,Hubbell提出的,他的生态模型就是基于模拟的,大致跟我上述说的情况有很多相似的地方,如果可以的话,你可以把所有Hubbell的模拟都用R改写过来,这样的话,大家用起来就方便多了。不过,上次开会中,Hubbell好像说R中有个Untb的包,可以做这些,但我回来看了看,也没怎么看懂,你可以去看看,是不是有收录,希望R可以更多的被许多生物生态的人应用,那样对R的推广无疑是很好的作用哦!有空常联系哈!