Les posteurs les plus actifs de la semaine
Aucun utilisateur |
Sujets les plus vus
Problème de coder une boucle sous R
3 participants
Page 1 sur 1
Problème de coder une boucle sous R
Bonjour,
J'ai parcourru plusieurs documents sur le net mais je n'arriver pas à comprendre comment coder mon programme sous R.
Dans mes données, j'ai 3 colonnes: Années, Surfaces brulées, Superficie de la région étudiée
Exemple:
Annee SurfaceBrulee SurfaceSite
1900 100 700
1901 230 700
1902 321 700
1903 254 700
1904 312 700
1905 425 700
Je calcule le cycle de feu. Pour le calculer,je cumule les surfaces brulées de plusieurs
années et dès que les surfaces brulées cumulées atteingnent la surface de la région étudiée:on a le 1er cycle de feu.
Pour le calcul du second cycle,les surfaces cumulées utilisées dans le 1er cycle ne sont pas prises en compte. Ainsi de suite.
L'opération sera répétée jusqu'à ce que les surfaces brulées cumulées n'atteingnent plus la Superficie de la région étudiée.
Le résultat de ce programme est de trouver le nombre de cycles et le nombre d'années nécessaires pour atteindre chaque cycle.
Est ce que quelqu'un peut me donner des pistes pour écrire ce programme!
Merci d'avance
J'ai parcourru plusieurs documents sur le net mais je n'arriver pas à comprendre comment coder mon programme sous R.
Dans mes données, j'ai 3 colonnes: Années, Surfaces brulées, Superficie de la région étudiée
Exemple:
Annee SurfaceBrulee SurfaceSite
1900 100 700
1901 230 700
1902 321 700
1903 254 700
1904 312 700
1905 425 700
Je calcule le cycle de feu. Pour le calculer,je cumule les surfaces brulées de plusieurs
années et dès que les surfaces brulées cumulées atteingnent la surface de la région étudiée:on a le 1er cycle de feu.
Pour le calcul du second cycle,les surfaces cumulées utilisées dans le 1er cycle ne sont pas prises en compte. Ainsi de suite.
L'opération sera répétée jusqu'à ce que les surfaces brulées cumulées n'atteingnent plus la Superficie de la région étudiée.
Le résultat de ce programme est de trouver le nombre de cycles et le nombre d'années nécessaires pour atteindre chaque cycle.
Est ce que quelqu'un peut me donner des pistes pour écrire ce programme!
Merci d'avance
Komine- Nombre de messages : 78
Date d'inscription : 02/06/2010
Re: Problème de coder une boucle sous R
Bonjour,
en admettant que tes données soient toujours sous la forme que tu nous a présentée (1 ligne par année et toujours la même surface du site) tu peux faire comme ça :
en admettant que tes données soient toujours sous la forme que tu nous a présentée (1 ligne par année et toujours la même surface du site) tu peux faire comme ça :
- Code:
tab
Annee SurfaceBrulee SurfaceSite
1 1900 100 700
2 1901 230 700
3 1902 321 700
4 1903 254 700
5 1904 312 700
6 1905 425 700
ted <- tab$SurfaceBrulee
cycles <- 0
annees <- 0
while(sum(ted)>700){
bob <- cumsum(ted)>700
if (any(bob)){
cycles <- cycles+1
aux <- which(bob)[1]
annees <- c(annees, max(annees)+aux)
ted <- ted[-c(1:aux)]
}
else
ted <- 0
}
annees <- diff(annees)
cycles
[1] 2
annees
[1] 4 2
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Problème de coder une boucle sous R
Salut,
[Droopy a posté entre temps : j'ai laissé en l'état. Par contre le code ci-dessous suppose que tu as déjà les surfaces cumulées, sinon voir cumsum comme Droopy l'a indiqué]
Essaye ça pour voir si ça permet de définir un vecteur cycle qui correspond à la numérotation des cycles dans l'ordre d'apparition
nik
[Droopy a posté entre temps : j'ai laissé en l'état. Par contre le code ci-dessous suppose que tu as déjà les surfaces cumulées, sinon voir cumsum comme Droopy l'a indiqué]
Essaye ça pour voir si ça permet de définir un vecteur cycle qui correspond à la numérotation des cycles dans l'ordre d'apparition
- Code:
k <- 1
apply(data,1,function(x) {
cycle = NULL
ifelse(x[1]<=x[2],cycle <- c(cycle,k), function(...) {k <- k+1; cycle <- c(cycle,k)} )
}
)
nik
Nik- Nombre de messages : 1606
Date d'inscription : 23/05/2008
Re: Problème de coder une boucle sous R
Bonjour,
Très Très grand Merci à droopy et Nik,
Je suis parvenu à faire ce que je voulais avec le code de droopy ... après une semaine de galère.
Par ailleurs, j'ai essayé le code de Nik en utilisant les surfaces cumulées mais j'ai un message d'erreur:
Très Très grand Merci à droopy et Nik,
Je suis parvenu à faire ce que je voulais avec le code de droopy ... après une semaine de galère.
Par ailleurs, j'ai essayé le code de Nik en utilisant les surfaces cumulées mais j'ai un message d'erreur:
- Code:
Erreur : objet de type 'closure' non indiçable
Komine- Nombre de messages : 78
Date d'inscription : 02/06/2010
Re: Problème de coder une boucle sous R
j'avais aussi pensé au somme cumulée mais le problème de cette approche est qu'une fois que tu as passée les 700 (ou un de ces multiples) les somme cumulées suivantes ne repartent pas de 0 mais intègrent l'excédent de 700 donc ça ne permet d'avoir directement les cycles ...
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Problème de coder une boucle sous R
Merci encore droopy pour ces éclairages.
Komine- Nombre de messages : 78
Date d'inscription : 02/06/2010
Re: Problème de coder une boucle sous R
Pour ma part j'étais parti du fait (effectivement non précisé) que tu avais déjà les surfaces cumulées par cycle.
Nik
Nik
Nik- Nombre de messages : 1606
Date d'inscription : 23/05/2008
Re: Problème de coder une boucle sous R
re,
en vectorisant le calcul ça donne ça :
en vectorisant le calcul ça donne ça :
- Code:
test<- cumsum(tab$SurfaceBrulee)
test <- test-test%%700
test <- c(0, sign(diff(test)))
cycles <- sum(test)
annees <- which(test>0.5)
annees <- c(annees[1], diff(annees))
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Problème de coder une boucle sous R
Merci droopy de réagir encore,
Oui j'ai utilisé une maitrice de 10 lignes et j'ai 2 résultats différents:
Avec la 1ère méthode:
Merci d'avance
Oui j'ai utilisé une maitrice de 10 lignes et j'ai 2 résultats différents:
Avec la 1ère méthode:
- Code:
> cycles
[1] 4
> annees
[1] 4 2 2 2
- Code:
> cycles
[1] 5
> annees
[1] 4 2 1 2 1
Merci d'avance
Komine- Nombre de messages : 78
Date d'inscription : 02/06/2010
Re: Problème de coder une boucle sous R
est-ce que tu afficher ta matrice, stp.
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Problème de coder une boucle sous R
Oui j'ai essayé avec ce jeu de donnée
- Code:
Annee SurfaceBrulee SurfaceSite
1900 100 700
1901 230 700
1902 321 700
1903 254 700
1904 312 700
1905 425 700
1906 621 700
1907 356 700
1908 452 700
1909 624 700
1910 425 700
Komine- Nombre de messages : 78
Date d'inscription : 02/06/2010
Re: Problème de coder une boucle sous R
le 1er. après je regarderais plus tard pourquoi le 2ème déconne
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Problème de coder une boucle sous R
Merci beaucoup droopy.
Komine- Nombre de messages : 78
Date d'inscription : 02/06/2010
Sujets similaires
» Lancer une boucle qui s'arrête sous condition
» problème ACP sous SPAD
» Boucle d'histogramme
» calcul avec boucle
» Construire boucle et fonction
» problème ACP sous SPAD
» Boucle d'histogramme
» calcul avec boucle
» Construire boucle et fonction
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|