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:
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 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 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.
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) }
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 >Esp.T(df,14) NaN
Partager