Bonjour, après avoir cherché de long en large et en travers sur le forum je n'ai pas trouvé de réponse à mon problème de codage.
Je suis actuellement entrain de réaliser différents modules ayant pour but de mettre en évidence des résultats d'un écrit sur la statistique. Dans ce cadre nous travaillons sur une data frame de ce type:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Individu,Temps,x1,x2,x3,x4,c1
1,14,0,0,1,0,0
1,15,0,0,1,0,1
2,20,1,0,0,0,0
2,28,1,0,1,0,0
2,35,1,1,1,0,0
3,19,1,0,0,0,0
Le but que je me suis fixé est de calculer pour un T donné le nombre de marqueurs d'un individu ; j'ai nommé ma fonction Esp.T et l'ai codée de la façon suivante (je vous laisse mes commentaires, peut être seront-ils utiles):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Esp.T <- function(df,t)
{ 
  ## Data Frame
  ##~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ## Purpose: Calculer dans une df le nombre de marqueurs moyens pour une date t donnée
  ##~~~~~~~~~~~~~~~~~~~~
  ## Arguments:df une data frame
  ##           t une date donnée
  if (class(df) != "data.frame")
  {
        stop("'df' doit être une data.frame")
  }else{
  ## Test si t est bien plus grand qu'au moins une valeur sinon pas de sens
  if (min(df$Temps)>t)
  {E<- 0
  }else{
        N <-dim(df)
        n <-df[N[1],1]
        p <-N[2]
  ##Mise en place vecteur pour le nombre de marqueur  
        M <- rep(0,n) 
  ##Debut de la boucle du calcul du vecteur des marqueurs      
        for (i in 1:n)
        {
  ## Restriction du df à l'ind i et on enleve les t supérieurs        
        DIT<- df[df$Individu==i&df$Temps<=t,]
  ## Vérification qu'il y a bien un marqueur à la date t     
        if (nrow(DIT)==0)
        {M[i] <-0
        }else{
  ## Vérification de la censure        
              if (DIT[nrow(DIT),ncol(DIT)]==1)
              {M[i] <-NA
              }else{
                    DITf<-DIT[nrow(DIT),-c(1,2,p)]
                    M[i]<- sum(DITf)
                    }
             }
        }
   ##Suppression des NA dans M pour calculer la bonne espérance
M.manq <- which(is.na(M),arr.ind=T)
M <- M[-unique(M.manq)]
l <- length(M)
E <- (1/l)*sum(M)
#return(M)
#return(l)
        }
  }
 
return(E)
}
Le problème que je rencontre est lorsque je prend la valeur minimale de t de ma data frame puisque la réponse renvoyée est NaN.
Après avoir repris ligne par ligne etc... Je n'ai toujours pas réussi à trouver d'où pouvait provenir l'erreur. Alors si quelqu'un à la moindre idée, je lui en serait reconnaissant.