1 | simula.neutra.step(S = 100, j = 10, X = 1000, dp = 0.1, ciclo = 1e+06, step = 100)
|
S |
|
j |
|
X |
|
dp |
|
ciclo |
|
step |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | ##---- Should be DIRECTLY executable !! ----
##-- ==> Define data, use random,
##-- or do help(data=index) for the standard data sets.
## The function is currently defined as
function (S = 100, j = 10, X = 1000, dp = 0.1, ciclo = 1e+06,
step = 100)
{
t0 = proc.time()[[3]]
J <- S * j
if (abs(X/J - round(X/J)) > .Machine$double.eps^0.5) {
stop("\n\tO potencial reprodutivo (X) precisa ser multiplo do tamanho da comunidade (J). Tente novamente!\n\n")
}
ind.mat = matrix(nrow = J, ncol = 1 + ciclo/step)
prop.mat = matrix(nrow = J, ncol = 1 + ciclo/step)
dead.mat = matrix(nrow = J, ncol = 1 + ciclo/step)
n.dead <- c()
n.dead[1] <- 0
ind.mat[, 1] <- rep(1:S, each = j)
cod.sp <- ind.mat[, 1]
dead.mat[, 1] <- 1/J
p.death <- dead.mat[, 1]
prop.mat[, 1] <- X/J
n.propag <- prop.mat[, 1]
for (i in 2:(1 + ciclo/step)) {
n.mortes <- 0
for (a in 1:step) {
morte = rbinom(J, 1, prob = p.death)
D = sum(morte)
n.mortes <- n.mortes + D
if (D > 0) {
seed.bank <- rep(1:J, n.propag)
nascer = which(morte == 1)
mami = sample(seed.bank, D)
papi <- c()
for (w in 1:D) {
papi[w] <- sample(n.propag[cod.sp == cod.sp[mami[w]]],
1)
}
medias.prop = (n.propag[mami] + papi)/2
cod.sp[nascer] <- cod.sp[mami]
n.propag[nascer] <- sapply(medias.prop, rnormt,
dp = dp, min = 1, max = X)
p.death[nascer] <- n.propag[nascer]/X
}
}
ind.mat[, i] <- cod.sp
dead.mat[, i] <- p.death
prop.mat[, i] <- n.propag
n.dead[i] <- n.mortes
}
tempo <- seq(0, ciclo, by = step)
colnames(ind.mat) <- tempo
colnames(dead.mat) <- tempo
colnames(prop.mat) <- tempo
names(n.dead) <- tempo
resulta = list(tempo = tempo, sp.list = ind.mat, sementes = prop.mat,
prob.morte = dead.mat, n.mortes = n.dead)
t1 = proc.time()[[3]]
cat("\n\t tempo de processamento: ", round((t1 - t0)/60,
2), "\n")
attributes(resulta)$start = list(especies = S, individuos = j,
nprop = X, sd = dp, ciclos = ciclo, passos = step)
return(resulta)
}
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.