我现在有个模拟的问题摆在手边,开始想用C解决,后来想能不能用R做呢?
问题是这样的:
在一个10*10的样地中,共100个格子,其中50个随机是物种A,剩的是物种B,在这些格子中随机选一个个体死亡,如果是A,那么还有49/100的概率被A物种顶替这个格子,1-49/100的概率被B替代,这样重复10次
这个用R怎么编,我编了点,编不动了。
再顺便问问,R中有指针么?
用R做生态模拟
(6 篇回复) (3 个人参与)-
这个模拟很容易;不过我想再次证实两点关键的模拟规则:
(1)每次死亡的物种是随机选择的,与它们当前的物种数目无关;
(2)每次替代的物种是基于当前的物种数目的(以该数目为概率选取物种);
如果这两点没有问题的话,那么我估计5行左右的代码就可以完成模拟了,这里是一个图示:
ecol.simu = function(nr = 10, nc = 10, col.sp = c(1,
2), pch.sp = c(1, 2), col.die = 1, pch.die = 4, cex = 3,
nmax = 50, interval = 1) {
x = rep(1:nc, nr)
y = rep(1:nr, each = nc)
par(ann = FALSE)
p = sample(rep(1:2, nr * nc/2), nr * nc)
for (i in 1:nmax) {
plot(1:nc, 1:nr, type = "n", xlim = c(0.5, nc + 0.5),
ylim = c(0.5, nr + 0.5))
abline(h = 1:nr, v = 1:nc, col = "lightgray", lty = 3)
points(x, y, col = col.sp[p], pch = pch.sp[p], cex = cex)
Sys.sleep(interval)
idx = sample(nr * nc, 1)
points(x[idx], y[idx], pch = pch.die, col = col.die,
cex = cex, lwd = 3)
tbl = as.vector(table(p))
tbl = tbl + sign(p[idx] - 1.5) * c(1, -1)
p[idx] = sample(1:2, 1, prob = tbl)
Sys.sleep(interval)
}
p
}
par(mar = c(3, 3, 1, 1))
# 正常的模拟
ecol.simu()
# 让死亡来得更猛烈些吧!!
ecol.simu(col.sp = c(8, 2), pch.sp = c(20, 17), nmax = 1000,
interval = 0.05)
回复
您必须登录才能回复。