From 2045c9822af00431880e278531db37f175ecfe99 Mon Sep 17 00:00:00 2001 From: Maxime WACK Date: Tue, 17 Jun 2014 17:09:56 +0200 Subject: [PATCH] Now stats can be specified also for desc_groupe, in the same fashion as for desc_global and with the same defaults. Help files have been corrected accordingly Small fix in desc.css to allow the centering of the stats names --- R/desc_global.R | 2 +- R/desc_groupe.R | 63 +++++++++++++++++++++++++++++++++++----------- inst/desc.css | 6 +++++ man/desc_global.Rd | 4 +-- man/desc_groupe.Rd | 10 +++++--- 5 files changed, 64 insertions(+), 21 deletions(-) diff --git a/R/desc_global.R b/R/desc_global.R index 999b204..05dfdb0 100644 --- a/R/desc_global.R +++ b/R/desc_global.R @@ -11,7 +11,7 @@ #' @param titre Titre du tableau, par defaut "Descriptif global de nom_de_la_table" #' @param variables Vecteur de noms de variables a decrire, par defaut toutes les variables contenues dans la table #' @param variables_neg Vecteur de noms de variables a exclure de la description -#' @param stats Vecteur de valeurs a calculer, parmi N, \%, \%/moy, moy, \%/med, med, et, ic95, q1, med, q3, min et max. Par defaut c("N","\%/moy","et") +#' @param stats Vecteur de valeurs a calculer, parmi N, \%, \%/moy, moy, \%/med, med, et, ic95, Q1, med, Q3, min et max. Par defaut c("N","\%/moy","et") #' @param miss Booleen : afficher ou non les valeurs manquantes, par defaut TRUE #' @param note Note de bas de page, par defaut vide #' @param nbdec Nombre de decimales apres la virgule, par defaut 1 diff --git a/R/desc_groupe.R b/R/desc_groupe.R index d6a8e7d..0cc9c74 100644 --- a/R/desc_groupe.R +++ b/R/desc_groupe.R @@ -13,6 +13,7 @@ #' @param titre Titre du tableau, par defaut "Comparaison selon nom_de_la_variable" #' @param variables Vecteur de noms de variables a comparer, par defaut toutes les variables contenues dans la table moins celle servant de comparateur #' @param variables_neg Vecteur de noms de variables a exclure de la comparaison +#' #' @param stats Vecteur de valeurs a calculer, parmi N, \%, \%/moy, moy, \%/med, med, et, ic95, Q1, med, Q3, min et max. Par defaut c("N","\%/moy","et") #' @param note Note de bas de page, par defaut vide #' @param nbdec Nombre de decimales apres la virgule, par defaut 1 #' @param pourcent Pourcentages pour les variables qualitatives, en colonnes ("col") ou en lignes ("row"), par defaut sur le total @@ -26,7 +27,7 @@ #' desc_groupe(Ma_table, "sexe", param = para, titre="Comparatif selon le sexe", pourcent="row") #' } #' @export -desc_groupe <- function(table, groupe, param = character(0), html=NULL, titre=NULL, variables=NULL, variables_neg=NULL, note=NULL, nbdec=1, pourcent="total") +desc_groupe <- function(table, groupe, param = character(0), html=NULL, titre=NULL, variables=NULL, variables_neg=NULL,stats=c("N","%/moy","et"), note=NULL, nbdec=1, pourcent="total") { if (nbdec<2) nbdecp<-2 @@ -92,16 +93,15 @@ desc_groupe <- function(table, groupe, param = character(0), html=NULL, titre=NU HTML("") inc() - HTML("", paste0("",levels(modulo),"", collapse=""), "p") + HTML("", paste0("",levels(modulo),"", collapse=""), "p") HTML("", sep="") for (i in levels(modulo)) - { - HTML("N=", length(na.omit(modulo[modulo==i])), "", sep="") - } + HTML("N=", length(na.omit(modulo[modulo==i])), "", sep="") + HTML("") - HTML("", paste0(rep(c("N","%/moy","et"),nlevels(modulo)),collapse=""), "") + HTML("", paste0(rep(paste("",stats,"",sep="", collapse=""),nlevels(modulo)),collapse=""), "") dec() HTML("") @@ -111,7 +111,7 @@ desc_groupe <- function(table, groupe, param = character(0), html=NULL, titre=NU { HTML("") inc() - HTML("", note,"") + HTML("", note,"") dec() HTML("") } @@ -158,7 +158,32 @@ desc_groupe <- function(table, groupe, param = character(0), html=NULL, titre=NU HTML("", etiq, "", sep="") for (level in levels(modulo)) - HTML("",length(na.omit(table[[var]][modulo==level])) ,"",format(mean(table[[var]][modulo==level], na.rm=T), digits=nbdec,nsmall=nbdec), "", format(sd(table[[var]][modulo==level],na.rm=T), digits=nbdec,nsmall=nbdec), "", sep="") + { + for (stat in stats) + { + HTML("",sep="") + + HTML(tryCatch( + { + format(switch(stat, + N = length(na.omit(table[[var]][modulo==level])), + "%/moy" = , + moy = mean(table[[var]][modulo==level],na.rm=T), + "%/med" = , + med = median(table[[var]][modulo==level],na.rm=T), + Q1 = quantile(table[[var]][modulo==level], probs=.25, na.rm=T,names=F,type=3), + Q3 = quantile(table[[var]][modulo==level], probs=.75, na.rm=T,names=F,type=3), + min = min(table[[var]][modulo==level],na.rm=T), + max = max(table[[var]][modulo==level],na.rm=T), + et = sd(table[[var]][modulo==level],na.rm=T), + ic95 = paste0("±",format(mean(table[[var]][modulo==level],na.rm=T) - t.test(table[[var]][modulo==level])$conf.int[1], digits=nbdec,nsmall=nbdec)), + ... = "ERR" + ),digits=nbdec,nsmall=nbdec) + },error = function(e){erreur(e,var,"dans le calcul de ",stat)}), sep="") + + HTML("", sep="") + } + } HTML("", format(p,digits=nbdecp,nsmall=nbdecp), sep="") if (!is.na(p)) @@ -194,7 +219,7 @@ desc_groupe <- function(table, groupe, param = character(0), html=NULL, titre=NU "NA" }) - HTML("", etiq, "", sep="") + HTML("", etiq, "", sep="") HTML("", format(p,digits=nbdecp,nsmall=nbdecp), sep="") if (!is.na(p)) if (p<.05) @@ -208,12 +233,20 @@ desc_groupe <- function(table, groupe, param = character(0), html=NULL, titre=NU HTML("", level, "",sep="") for (level_m in levels(modulo)) { - HTML("", table(table[[var]],modulo)[level,level_m], "", sep="") - switch(pourcent, - row = HTML("", format(100*table(table[[var]],modulo)[level,level_m]/rowSums(table(table[[var]],modulo))[level], digits=nbdec, nsmall=nbdec), "", sep=""), - col = HTML("", format(100*table(table[[var]],modulo)[level,level_m]/colSums(table(table[[var]],modulo))[level_m], digits=nbdec, nsmall=nbdec), "", sep=""), - total = HTML("", format(100*table(table[[var]],modulo)[level,level_m]/sum(table(table[[var]],modulo)), digits=nbdec, nsmall=nbdec), "", sep="")) - HTML("",sep="") + for (stat in stats) + { + HTML("",sep="") + + if (stat == "N") + HTML(table(table[[var]],modulo)[level,level_m],sep="") + else if ((stat == "%") | (stat == "%/moy") | (stat == "%/med")) + switch(pourcent, + row = HTML(format(100*table(table[[var]],modulo)[level,level_m]/rowSums(table(table[[var]],modulo))[level], digits=nbdec, nsmall=nbdec), sep=""), + col = HTML(format(100*table(table[[var]],modulo)[level,level_m]/colSums(table(table[[var]],modulo))[level_m], digits=nbdec, nsmall=nbdec), sep=""), + total = HTML(format(100*table(table[[var]],modulo)[level,level_m]/sum(table(table[[var]],modulo)), digits=nbdec, nsmall=nbdec), sep="")) + + HTML("",sep="") + } } HTML("") diff --git a/inst/desc.css b/inst/desc.css index f2cf79e..de6de9d 100644 --- a/inst/desc.css +++ b/inst/desc.css @@ -61,6 +61,12 @@ table.desc tbody td.level } table.desc tbody td +{ + text-align: center; + vertical-align: bottom; +} + +table.desc thead, td { text-align: center; vertical-align: bottom; diff --git a/man/desc_global.Rd b/man/desc_global.Rd index ebfb8dc..68798c6 100644 --- a/man/desc_global.Rd +++ b/man/desc_global.Rd @@ -23,8 +23,8 @@ desc_global(table, html = "desc_global", titre = NULL, variables = NULL, exclure de la description} \item{stats}{Vecteur de valeurs a calculer, parmi N, \%, - \%/moy, moy, \%/med, med, et, ic95, q1, med, q3. Par - defaut c("N","\%/moy","et")} + \%/moy, moy, \%/med, med, et, ic95, Q1, med, Q3, min et + max. Par defaut c("N","\%/moy","et")} \item{miss}{Booleen : afficher ou non les valeurs manquantes, par defaut TRUE} diff --git a/man/desc_groupe.Rd b/man/desc_groupe.Rd index 1f0ddce..4625a32 100644 --- a/man/desc_groupe.Rd +++ b/man/desc_groupe.Rd @@ -4,8 +4,8 @@ \title{Comparatif par groupe} \usage{ desc_groupe(table, groupe, param = character(0), html = NULL, - titre = NULL, variables = NULL, variables_neg = NULL, note = NULL, - nbdec = 1, pourcent = "total") + titre = NULL, variables = NULL, variables_neg = NULL, stats = c("N", + "\%/moy", "et"), note = NULL, nbdec = 1, pourcent = "total") } \arguments{ \item{table}{Table a utiliser} @@ -27,7 +27,11 @@ desc_groupe(table, groupe, param = character(0), html = NULL, moins celle servant de comparateur} \item{variables_neg}{Vecteur de noms de variables a - exclure de la comparaison} + exclure de la comparaison #'} + + \item{stats}{Vecteur de valeurs a calculer, parmi N, \%, + \%/moy, moy, \%/med, med, et, ic95, Q1, med, Q3, min et + max. Par defaut c("N","\%/moy","et")} \item{note}{Note de bas de page, par defaut vide}