Forum de Statistiques
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Les posteurs les plus actifs de la semaine
Aucun utilisateur

Le deal à ne pas rater :
TCL C74 Series 55C743 – TV 55” 4K QLED 144 Hz Google TV (Via ODR ...
499 €
Voir le deal

Problème de coder une boucle sous R

3 participants

Aller en bas

Problème de coder une boucle sous R Empty Problème de coder une boucle sous R

Message par Komine Lun 13 Fév 2012 - 18:35

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

Komine

Nombre de messages : 78
Date d'inscription : 02/06/2010

Revenir en haut Aller en bas

Problème de coder une boucle sous R Empty Re: Problème de coder une boucle sous R

Message par droopy Mar 14 Fév 2012 - 8:26

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 :
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
Après c'est pas super satisfaisant, mais ça devrait faire ce que tu cherchais.
droopy
droopy

Nombre de messages : 1156
Date d'inscription : 04/09/2009

Revenir en haut Aller en bas

Problème de coder une boucle sous R Empty Re: Problème de coder une boucle sous R

Message par Nik Mar 14 Fév 2012 - 8:37

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
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

Revenir en haut Aller en bas

Problème de coder une boucle sous R Empty Re: Problème de coder une boucle sous R

Message par Komine Mar 14 Fév 2012 - 12:26

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:
Code:
Erreur : objet de type 'closure' non indiçable

Komine

Nombre de messages : 78
Date d'inscription : 02/06/2010

Revenir en haut Aller en bas

Problème de coder une boucle sous R Empty Re: Problème de coder une boucle sous R

Message par droopy Mar 14 Fév 2012 - 12:54

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
droopy

Nombre de messages : 1156
Date d'inscription : 04/09/2009

Revenir en haut Aller en bas

Problème de coder une boucle sous R Empty Re: Problème de coder une boucle sous R

Message par Komine Mar 14 Fév 2012 - 13:02

Merci encore droopy pour ces éclairages.

Komine

Nombre de messages : 78
Date d'inscription : 02/06/2010

Revenir en haut Aller en bas

Problème de coder une boucle sous R Empty Re: Problème de coder une boucle sous R

Message par Nik Mar 14 Fév 2012 - 13:08

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

Nombre de messages : 1606
Date d'inscription : 23/05/2008

Revenir en haut Aller en bas

Problème de coder une boucle sous R Empty Re: Problème de coder une boucle sous R

Message par droopy Mar 14 Fév 2012 - 14:21

re,

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))
Sur un jeu de données assez long tu devrais voir des différences de temps de calcul. A vérifier si tu obtiens bien les mêmes choses.
droopy
droopy

Nombre de messages : 1156
Date d'inscription : 04/09/2009

Revenir en haut Aller en bas

Problème de coder une boucle sous R Empty Re: Problème de coder une boucle sous R

Message par Komine Mar 14 Fév 2012 - 15:48

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:
Code:
> cycles
[1] 4
> annees
[1] 4 2 2 2
2ème méthode:
Code:
> cycles
[1] 5
> annees
[1] 4 2 1 2 1
Laquelle des 2 méthodes est la plus fiable?
Merci d'avance

Komine

Nombre de messages : 78
Date d'inscription : 02/06/2010

Revenir en haut Aller en bas

Problème de coder une boucle sous R Empty Re: Problème de coder une boucle sous R

Message par droopy Mer 15 Fév 2012 - 13:15

est-ce que tu afficher ta matrice, stp.
droopy
droopy

Nombre de messages : 1156
Date d'inscription : 04/09/2009

Revenir en haut Aller en bas

Problème de coder une boucle sous R Empty Re: Problème de coder une boucle sous R

Message par Komine Mer 15 Fév 2012 - 13:46

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
Merci d'avance

Komine

Nombre de messages : 78
Date d'inscription : 02/06/2010

Revenir en haut Aller en bas

Problème de coder une boucle sous R Empty Re: Problème de coder une boucle sous R

Message par droopy Mer 15 Fév 2012 - 14:33

le 1er. après je regarderais plus tard pourquoi le 2ème déconne
droopy
droopy

Nombre de messages : 1156
Date d'inscription : 04/09/2009

Revenir en haut Aller en bas

Problème de coder une boucle sous R Empty Re: Problème de coder une boucle sous R

Message par Komine Mer 15 Fév 2012 - 17:38

Merci beaucoup droopy.

Komine

Nombre de messages : 78
Date d'inscription : 02/06/2010

Revenir en haut Aller en bas

Problème de coder une boucle sous R Empty Re: Problème de coder une boucle sous R

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum