Les posteurs les plus actifs de la semaine
Aucun utilisateur |
Sujets les plus vus
dynamique des pop, boucle matrice et vecteur R
3 participants
Page 1 sur 1
dynamique des pop, boucle matrice et vecteur R
Bonjour,
Étant novice en programmation j'ai quelques difficultés à coder sur R. Mon problème est le suivant :
Imaginons que j'ai une population d'une taille initiale de 2000 individus et que son taux de croissance est de 1.1. Je veux calculer les effectifs sur 100 générations et je fais donc la boucle suivante :
Pop <- 2000 ### effectif initial de la population
Gen <- 100 ### nombre de génération
for (n in 2:Gen) {
Pop[n] <- Pop[n - 1] * 1.05
}
Popn
Maintenant je veux faire la même chose mais avec 5 classes d'âge et une matrice de transition. En gros j'ai mon vecteur avec mes effectifs initiaux:
v<- c(300,300,400,500,500) et une matrice de transition M déjà définie de taille 5 lignes, 5 colonnes. J'aimerais calculer les effectifs de chaque classe sur 100 générations par une boucle du même type que la suivante (calquée sur la 1ere), mais je n'y arrive pas.
v<- c(300,300,400,500,500) ### effectifs initiaux de chaque classe d'âge
Gen <- 100 ### nombre de génération
for (n in 2:Gen) {
v[n] <- v[n - 1] %*% M
}
v[n]
Donc si quelqu'un a la solution ça serait super!
Merci!
Étant novice en programmation j'ai quelques difficultés à coder sur R. Mon problème est le suivant :
Imaginons que j'ai une population d'une taille initiale de 2000 individus et que son taux de croissance est de 1.1. Je veux calculer les effectifs sur 100 générations et je fais donc la boucle suivante :
Pop <- 2000 ### effectif initial de la population
Gen <- 100 ### nombre de génération
for (n in 2:Gen) {
Pop[n] <- Pop[n - 1] * 1.05
}
Popn
Maintenant je veux faire la même chose mais avec 5 classes d'âge et une matrice de transition. En gros j'ai mon vecteur avec mes effectifs initiaux:
v<- c(300,300,400,500,500) et une matrice de transition M déjà définie de taille 5 lignes, 5 colonnes. J'aimerais calculer les effectifs de chaque classe sur 100 générations par une boucle du même type que la suivante (calquée sur la 1ere), mais je n'y arrive pas.
v<- c(300,300,400,500,500) ### effectifs initiaux de chaque classe d'âge
Gen <- 100 ### nombre de génération
for (n in 2:Gen) {
v[n] <- v[n - 1] %*% M
}
v[n]
Donc si quelqu'un a la solution ça serait super!
Merci!
Koudou- Nombre de messages : 2
Date d'inscription : 10/12/2013
Re: dynamique des pop, boucle matrice et vecteur R
bonjour,
les solutions sont plus mathématiques que de la progra :
les solutions sont plus mathématiques que de la progra :
- Code:
#1
Pop <- Pop*(1.05)^(0:99)
pop <- c(30,50,50)
M <- structure(c(0, 6, 10, 0.5, 0, 0, 0, 0.4, 0), .Dim = c(3L, 3L)) # la matrice de transition
# décomposition de cette matrice
eig <- eigen(M)
# matrice de passage
P <- eig$vectors
# matrice diagonale :
Md <- diag(eig$values)
# le calcul des effectifs :
cbind(pop,sapply(1:99, function(x) pop%*%P%*%Md^x%*%solve(P)))
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: dynamique des pop, boucle matrice et vecteur R
Comme quoi on peut souvent éviter les boucles...
C'est super, ça marche, merci! En revanche j'ai du mal à saisir le sens de la dernière ligne de code?
C'est super, ça marche, merci! En revanche j'ai du mal à saisir le sens de la dernière ligne de code?
Koudou- Nombre de messages : 2
Date d'inscription : 10/12/2013
Re: dynamique des pop, boucle matrice et vecteur R
Koudou a écrit:Comme quoi on peut souvent éviter les boucles
D'autant plus que R déteste les boucles, d'où l'existence de la famille de fonctions apply.
Re: dynamique des pop, boucle matrice et vecteur R
Je ne ne partage qu'à moitié cette affirmation. Parfois UNE boucle est plus rapide qu'un apply. Les apply font quand même appel à une boucle simple :joyeux_lapin13 a écrit:D'autant plus que R déteste les boucles, d'où l'existence de la famille de fonctions apply.
- Code:
# extrait de apply
else for (i in 1L:d2) {
tmp <- FUN(array(newX[, i], d.call, dn.call), ...)
if (!is.null(tmp))
ans[[i]] <- tmp
}
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: dynamique des pop, boucle matrice et vecteur R
Tu as tout à fait raison Droopy, je voulais dire que R n'aime pas les boucles dans des boucles.
Sujets similaires
» Matrice d'information de Fisher et matrice de covariance
» Dynamique population
» Rajouter des "names" de vecteur
» Impossible d'allouer un vecteur de taille 15.4 Go
» Boucle d'histogramme
» Dynamique population
» Rajouter des "names" de vecteur
» Impossible d'allouer un vecteur de taille 15.4 Go
» Boucle d'histogramme
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|