R et LaTeX

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

R et LaTeX

Messagepar Christophe Genolini » 14 Juin 2006, 15:14

Bonjour

J'ai pondu un petit script R qui a partir d'une variable ecrit le code LaTeX correspondant à une analyse univarié. Rien de génial ou révolutionnaire, mais c'est bien pratique surtout si on a beaucoup de variables et qu'on veut faire une analyse univarié rapide

Si ca peut servir a d'autres utilisateurs de LaTeX...

Code : Tout sélectionner

latexUnivarie <-  function(vari,namesVar,r01,nomFich,typeVar){
  if(typeVar=="N"){latexUnivarieNominale(vari,namesVar,r01,nomFich)}
  if(typeVar=="O"){latexUnivarieOrdonnee(vari,namesVar,r01,nomFich)}
  if(typeVar=="D"){latexUnivarieDiscrete(vari,namesVar,r01,nomFich)}
  if(typeVar=="C"){latexUnivarieContinue(vari,namesVar,r01,nomFich)}
}


latexUnivarieNominale <- function(vari,namesVar,r01,nomFich){
  latexUnivarieQualitative(vari,namesVar,r01,nomFich,"Nominale")
}

latexUnivarieOrdonnee <- function(vari,namesVar,r01,nomFich){
  latexUnivarieQualitative(vari,namesVar,r01,nomFich,"Ordonnee")
}


latexUnivarieQualitative <- function(vari,namesVar,r01,nomFich,typeVar){

  cat("\\begin{table}[H]\n",file=nomFich,append=TRUE)
  cat("  \\begin{center}\n",file=nomFich,append=TRUE)
  cat("    \\addtolength{\\leftskip}{-4cm}\\addtolength{\\rightskip}{-4cm}\n",file=nomFich,append=TRUE)
  cat("    \\begin{tabular}{|l|c|cc|c|} \\hline\n",file=nomFich,append=TRUE)
  cat("      {\\bf Variable} & {\\bf Effectif} & {\\bf Camembert} & {\\bf Histogramme} & {\\bf NA} \\\\ \\hline\n",file=nomFich,append=TRUE)
  cat("      \\begin{tabular}{@{}l@{}}\\vari{",namesVar,"}\\\\",typeVar,"\\end{tabular} & \n",sep="",file=nomFich,append=TRUE)

  tableVar <- table(vari)
  sommeVar <- sum(tableVar)
  cat("      \\begin{tabular}{@{}l@{ : }lr@{}}\n",file=nomFich,append=TRUE);
  for(i in 1:nrow(tableVar)){
    cat("        ",labels(tableVar[i]),"&",tableVar[i][[1]],"&(",file=nomFich,append=TRUE)
    cat(format(tableVar[i][[1]]/sommeVar*100,digits=3),file=nomFich,append=TRUE)
    cat("\\%) \\\\\n",file=nomFich,append=TRUE)
  }
  cat("      \\end{tabular} &\n",file=nomFich,append=TRUE)

  nomPScam <- paste("./Graph/",r01,"-",namesVar,"-cam.eps",sep="")
  postscript(file=nomPScam,horizontal=FALSE,width=4,height=4)
    pie(tableVar)
  dev.off()

  nomPShist <- paste("./Graph/",r01,"-",namesVar,"-hist.eps",sep="")
  postscript(file=nomPShist,horizontal=FALSE,width=6,height=6)
    barplot(tableVar)
  dev.off()

  cat("      \\begin{tabular}{@{}l@{}}\\epsfig{figure=",nomPScam,",width=4cm}\\end{tabular} &\n",sep="",file=nomFich,append=TRUE)
  cat("      \\begin{tabular}{@{}l@{}}\\epsfig{figure=",nomPShist,",width=3cm}\\end{tabular} &\n",sep="",file=nomFich,append=TRUE)
  cat("      ",file=nomFich,append=TRUE)
  cat(sum(is.na(vari)),file=nomFich,append=TRUE)
  cat(" \\\\ \\hline \n",file=nomFich,append=TRUE)
  cat("    \\end{tabular}\n",file=nomFich,append=TRUE)
  cat("  \\caption{Analyse univarié, \\vari{",namesVar,"}}\n",sep="",file=nomFich,append=TRUE)
  cat("  \\end{center}\n",file=nomFich,append=TRUE)
  cat("\\end{table}\n\n",file=nomFich,append=TRUE)
}


### Discrete
latexUnivarieDiscrete <- function(vari,namesVar,r01,nomFich){
  cat("\\begin{table}[H]\n",file=nomFich,append=TRUE)
  cat("  \\begin{center}\n",file=nomFich,append=TRUE)
  cat("    \\addtolength{\\leftskip}{-4cm}\\addtolength{\\rightskip}{-4cm}\n",file=nomFich,append=TRUE)
  cat("    \\begin{tabular}{|l|c|cc|c|} \\hline\n",file=nomFich,append=TRUE)
  cat("      {\\bf Variable} & {\\bf Indices} & {\\bf BoxPlot} & {\\bf Histogramme} & {\\bf NA} \\\\ \\hline\n",file=nomFich,append=TRUE)
  cat("      \\begin{tabular}{@{}l@{}}\\vari{",namesVar,"}\\\\ Discrete \\end{tabular} & \n",sep="",file=nomFich,append=TRUE)
  quartileVar <- summary(vari)
  cat("      \\begin{tabular}{@{}l@{ : }l@{}}\n",file=nomFich,append=TRUE);
  cat("        Min. &",quartileVar[1][[1]],"\\\\\n",file=nomFich,append=TRUE)
  cat("        Q1   &",quartileVar[2][[1]],"\\\\\n",file=nomFich,append=TRUE)
  cat("        Méd. &",quartileVar[3][[1]],"\\\\\n",file=nomFich,append=TRUE)
  cat("        Q3   &",quartileVar[5][[1]],"\\\\\n",file=nomFich,append=TRUE)
  cat("        Max. &",quartileVar[6][[1]],"\\\\ \\hline\n",file=nomFich,append=TRUE)
  cat("        Moy  &",quartileVar[4][[1]],"\\\\\n",file=nomFich,append=TRUE)
  cat("        Ecart &",sd(na.omit(vari)),"\\\\\n",file=nomFich,append=TRUE)
  cat("      \\end{tabular} &\n",file=nomFich,append=TRUE)

  nomPSbox <- paste("./Graph/",r01,"-",namesVar,"-box.eps",sep="")
  postscript(file=nomPSbox,horizontal=FALSE,width=4,height=8)
    boxplot(vari)
  dev.off()

  nomPShist <- paste("./Graph/",r01,"-",namesVar,"-hist.eps",sep="")
  postscript(file=nomPShist,horizontal=FALSE,width=6,height=6)
    plot(table(vari))
  dev.off()

  cat("      \\begin{tabular}{@{}l@{}}\\epsfig{figure=",nomPSbox,",width=2cm}\\end{tabular} &\n",sep="",file=nomFich,append=TRUE)
  cat("      \\begin{tabular}{@{}l@{}}\\epsfig{figure=",nomPShist,",width=3cm}\\end{tabular} &\n",sep="",file=nomFich,append=TRUE)
  cat("      ",file=nomFich,append=TRUE)
  cat(sum(is.na(vari)),file=nomFich,append=TRUE)
  cat(" \\\\ \\hline \n",file=nomFich,append=TRUE)
  cat("    \\end{tabular}\n",file=nomFich,append=TRUE)
  cat("  \\caption{Analyse univarié, \\vari{",namesVar,"}}\n",sep="",file=nomFich,append=TRUE)
  cat("  \\end{center}\n",file=nomFich,append=TRUE)
  cat("\\end{table}\n\n",file=nomFich,append=TRUE)
}



latexUnivarieContinue <- function(vari,namesVar,r01,nomFich){
  cat("\\begin{table}[H]\n",file=nomFich,append=TRUE)
  cat("  \\begin{center}\n",file=nomFich,append=TRUE)
  cat("    \\addtolength{\\leftskip}{-4cm}\\addtolength{\\rightskip}{-4cm}\n",file=nomFich,append=TRUE)
  cat("    \\begin{tabular}{|l|c|cc|c|} \\hline\n",file=nomFich,append=TRUE)
  cat("      {\\bf Variable} & {\\bf Indices} & {\\bf BoxPlot} & {\\bf Histogramme} & {\\bf NA} \\\\ \\hline\n",file=nomFich,append=TRUE)
  cat("      \\begin{tabular}{@{}l@{}}\\vari{",namesVar,"}\\\\ Continue \\end{tabular} & \n",sep="",file=nomFich,append=TRUE)
  quartileVar <- summary(vari)
  cat("      \\begin{tabular}{@{}l@{ : }l@{}}\n",file=nomFich,append=TRUE);
  cat("        Min. &",quartileVar[1][[1]],"\\\\\n",file=nomFich,append=TRUE)
  cat("        Q1   &",quartileVar[2][[1]],"\\\\\n",file=nomFich,append=TRUE)
  cat("        Méd. &",quartileVar[3][[1]],"\\\\\n",file=nomFich,append=TRUE)
  cat("        Q3   &",quartileVar[5][[1]],"\\\\\n",file=nomFich,append=TRUE)
  cat("        Max. &",quartileVar[6][[1]],"\\\\ \\hline\n",file=nomFich,append=TRUE)
  cat("        Moy  &",quartileVar[4][[1]],"\\\\\n",file=nomFich,append=TRUE)
  cat("        Ecart &",sd(na.omit(vari)),"\\\\\n",file=nomFich,append=TRUE)
  cat("      \\end{tabular} &\n",file=nomFich,append=TRUE)
                                     
  nomPSbox <- paste("./Graph/",r01,"-",namesVar,"-box.eps",sep="")
  postscript(file=nomPSbox,horizontal=FALSE,width=4,height=8)
    boxplot(vari)
  dev.off()

  nomPShist <- paste("./Graph/",r01,"-",namesVar,"-hist.eps",sep="")
  postscript(file=nomPShist,horizontal=FALSE,width=6,height=6)
    hist(vari,col="grey")
  dev.off()

  cat("      \\begin{tabular}{@{}l@{}}\\epsfig{figure=",nomPSbox,",width=2cm}\\end{tabular} &\n",sep="",file=nomFich,append=TRUE)
  cat("      \\begin{tabular}{@{}l@{}}\\epsfig{figure=",nomPShist,",width=3cm}\\end{tabular} &\n",sep="",file=nomFich,append=TRUE)
  cat("      ",file=nomFich,append=TRUE)
  cat(sum(is.na(vari)),file=nomFich,append=TRUE)
  cat(" \\\\ \\hline \n",file=nomFich,append=TRUE)
  cat("    \\end{tabular}\n",file=nomFich,append=TRUE)
  cat("  \\caption{Analyse univarié, \\vari{",namesVar,"}}\n",sep="",file=nomFich,append=TRUE)
  cat("  \\end{center}\n",file=nomFich,append=TRUE)
  cat("\\end{table}\n\n",file=nomFich,append=TRUE)
}


Les arguments sont :
* qu1 : nom de la variable
* "Question 1" : Nom qui sera affiché sous la table
* "Graph" : prefixe donné aux fichiers graphiques eps
* "univarie.tex" : nom du fichier a inclure dans votre fichier main.tex
* "O" : type de la variable. Les 4 types sont N (nominale), O (ordonné), D (discrete), C (continue)

Code : Tout sélectionner

latexUnivarie(qu1,"Question 1","Graph","univarie.tex","O")


Pour une utilisation "a la chaine" sur un data.frame Dn, je commence par creer un tableau varType qui contient le type de chaque variable. Puis :

Code : Tout sélectionner

for (i in ncol(Dn){
  latexUnivarie(qu1,names(Dn)[i],"Graph","univarie.tex",varType[i])
}


Toute l'analyse sera dans le fichier univarie.tex

attention, chaque instruction latexUnivarie ajoute du code au fichier univarie.tex. Si vous executez plusieur fois votre code, il est important de netoyer le fichier, par une ligne

cat("% **************\n",file="univarie.tex")

Je ne suis pas sur d'avoir posté au bon endroit... Dans le doute, je poste sur le plus général

Romain François
Messages : 42
Enregistré le : 08 Déc 2005, 19:23
Contact :

Pourquoi pas

Messagepar Romain François » 17 Juin 2006, 22:58

Bonjour,

Quelques remarques, j'espere ne pas etre trop décourageant ...


Aprends à te servir des ... (un exemple avec cat2 ci dessous), cela aurait pu te simplifier la vie.

Au lieu d'utiliser des cat(..., file="univarie.tex") à tout bout de champ, deux solutions :
-- regarder la fonction ?sink
-- ecrire une fonction cat2 à utiliser à la place de cat, là voila :

Code : Tout sélectionner

cat2 <- function(...) cat(..., file="univarie.tex")



ESt-ce que tu as essayé de regarder du coté des package xtable ou Hmisc qui ont des fonctions pour générer du latex. ou même sinon utiliser Sweave qui permet de mettre du code R dans un fichier tex, code qui est éxécuté au moment de la compilation du fichier latex.

De plus le code parrait un peu bourrin avec pas mal de répétitions, pourquoi pas le décapsuler en plus petites fonctions, par exemple une fonction pour afficher une en-tête de tableau, etc ...

De plus il y aurait à gagner à utiliser l'orientation objet de R pour faire ce genre de truc au lieu d'ecrire des noms de fonction à rallonge. genre par exemple avoir une methode générique qui s'appellerait LaTeX : fonction

Code : Tout sélectionner

LaTeX <- function(x, ...) UseMethod('LaTeX')


qui va s'adapter au type d'objet que tu va lui donner :
il suffira ensuite d'avoir une fonction LaTeX.foo pour chaque classe foo que tu veux considérer :

Code : Tout sélectionner

LaTeX.foo <- function(x, ...){
  # ici le code pour la classe foo
}


et ensuite il suffit de dire que tel objet est de la classe foo

Code : Tout sélectionner

class(x) <- "foo"


pour pouvoir utiliser simplement

Code : Tout sélectionner

LaTeX(x)
--
Romain François
Consultant R Indépendant
http://romainfrancois.blog.free.fr

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Re: Pourquoi pas

Messagepar Christophe Genolini » 03 Mai 2007, 13:23

Romain François a écrit :Bonjour,

Quelques remarques, j'espere ne pas etre trop décourageant ...

Non, du tout. J'ai juste compris qu'avant de poster, me fallait fouiller pas mal de pistes, ce que j'ai fais (d'ou le temps qui s'est écoulé entre mon premier et deuxième post).

Romain François a écrit :xtable, Hmisc ou Sweave

Ce que j'ai en tete est orthogonal, mais s'integrera tres bien.

Romain François a écrit :De plus il y aurait à gagner à utiliser l'orientation objet de R pour faire ce genre de truc au lieu d'ecrire des noms de fonction à rallonge. genre par exemple avoir une methode générique qui s'appellerait LaTeX : fonction

Code : Tout sélectionner

LaTeX <- function(x, ...) UseMethod('LaTeX')



Effectivement, c'est bien mieux ainsi. Voila le résultat :

Code : Tout sélectionner

##############################################################################
################## Mise en commun des fonctions d'affichage ##################
##############################################################################

##################################
# Pour la majorité des fonctions, l'argument "suite" indique ce que LaTeX doit
#   faire apres l'affichage du module actuel :
#     - Si suite="&", on aura un changement de colonne
#     - Si suite="\", on aura un changement de ligne


##################################
# Affiche le debut du tableau LaTeX
debutTableau <- function(posColonne,titreColonne){
  cat("
\\begin{table}[H]
  \\begin{center}
    \\addtolength{\\leftskip}{-4cm}\\addtolength{\\rightskip}{-4cm}
    \\begin{tabular}{",posColonne,"} \\hline
      ",titreColonne,"  \\\\ \\hline
  ");
}

##################################
# Fonction centralité et dispertion
afficheSummary <- function(donnees,suite){
  quartile <- summary(donnees)
  cat("      \\begin{tabular}{@{}l@{ : }l@{}}\n")
  cat("        Moy.  &",format(mean(na.omit(donnees)),digits=3),"\\\\\n")
  cat("        Var.  &",format(var(na.omit(donnees)),digits=3),"\\\\\n")
  cat("        Ecart &",format(sd(na.omit(donnees)),digits=3),"\\\\ \\hline \n")
  cat("        Min.  &",format(quartile[1][[1]],digits=3),"\\\\\n")
  cat("        Q1    &",format(quartile[2][[1]],digits=3),"\\\\\n")
  cat("        Méd.  &",format(quartile[3][[1]],digits=3),"\\\\\n")
  cat("        Q3    &",format(quartile[5][[1]],digits=3),"\\\\\n")
  cat("        Max.  &",format(quartile[6][[1]],digits=3),"\\\\\n")
  cat("      \\end{tabular}\n")
  cat("      ",suite)
}

##################################
# Fonction modalités de chaque observation
afficheEffectifModalites <- function(donnees,suite){
  cat("      \\begin{tabular}{@{}l@{ : }cl@{}}\n")
  tableVar <- table(donnees)
  sommeVar <- sum(tableVar)
  for(i in 1:nrow(tableVar)){
    cat("        ",labels(tableVar[i]),"&",tableVar[i][[1]],"&(")
    cat(format(tableVar[i][[1]]/sommeVar*100,digits=3))
    cat("\\%) \\\\\n")
  }
  cat("      \\end{tabular}\n")
  cat("      ",suite)
}

##################################
# Fonction calculant et exportant un barplot
afficheBarplot <- function(donnees,nom,suite){
  nomPSbarplot <- paste("./r2l-Graph/",nom,"-barplot.eps",sep="")
  postscript(file=nomPSbarplot,horizontal=FALSE,width=60,height=60)
    barplot(table(donnees),col="grey")
  dev.off()
  cat("      \\begin{tabular}{@{}l@{}}
        \\epsfig{figure=",nomPSbarplot,",width=3cm}
      \\end{tabular}\n")
  cat("      ",suite)
}

##################################
# Fonction calculant et exportant un histogramme
afficheHist <- function(donnees,nom,suite){
  nomPShist <- paste("./r2l-Graph/",nom,"-hist.eps",sep="")
  postscript(file=nomPShist,horizontal=FALSE,width=60,height=60)
    hist(donnees,col="grey")
  dev.off()
  cat("
      \\begin{tabular}{@{}l@{}}
        \\epsfig{figure=",nomPShist,",width=3cm}
      \\end{tabular}
  ")
  cat("      ",suite)
}

##################################
# Fonction calculant et exportant une boxplot
afficheBoxplot <- function(donnees,nom,suite){
  nomPSboxplot <- paste("./r2l-Graph/",nom,"-boxplot.eps",sep="")
  postscript(file=nomPSboxplot,horizontal=FALSE,width=40,height=80)
    boxplot(donnees)
  dev.off()
  cat("
      \\begin{tabular}{@{}l@{}}
        \\epsfig{figure=",nomPSboxplot,",width=2cm}
      \\end{tabular}
  ")
  cat("      ",suite)
}

##################################
# Fonction Effectif total et manquantes
afficheEffectifTotal <- function(donnees,nbCol,suite){
  cat("
      \\multicolumn{",nbCol,"}{|c|}{
        Effectif total : ",length(donnees)," ;
        Valeurs manquantes : ",sum(is.na(donnees))," (",format(sum(is.na(donnees))/length(donnees)*100,digits=3),"\\%)
      }
  ")
  cat("      ",suite)
}

##################################
# Affiche la fin du tableau LaTeX
finTableau <- function(nom,typeVar){
  cat("
    \\end{tabular}
  \\caption{",nom," ",typeVar,"}
  \\end{center}
\\end{table}
  ");
}



##############################################################################
######################## Debut des *vraies* fonctions ########################
##############################################################################

####################################
# Fonction de base à appeler
#   - eventuellement, ouvrir un fichier
#   - si on traite un data.frame, on appelle r2latexData
#   - sinon, si on traite une variable simple :
#      + on peut éventuellement forcer le type
#      + puis on appeler r2latexSingle
#   - eventuellement, on refermer le fichier
#
r2latexUniv <- function(donnees,nom=NA,classes=NA,fichier=NA,sweave=FALSE){
  if (!is.na(fichier)){sink(fichier)}else{}     # ouverture éventuelle du fichier texte
  if (class(donnees)=="data.frame"){            # selon qu'on traite un dataFrame ou non, le traitement diffère :
    r2latexUnivData(donnees,nom,classes)        # - si dataFrame, on prendra en compte "classes" plus tard
  }else{
    if (!is.na(classes)){                       # - si variable simple : si l'utilisateur veut forcer le type,
      class(donnees)<- classes                  #   on le change avant d'appeler la méthode
    }else{}
    r2latexUnivSingle(donnees,nom)              #   puis on appelle la fonction d'affichage LaTeX
  }
  if (!is.na(fichier)){sink()}else{}            # fermeture éventuelle du fichier texte
}


####################################
# Fonction de gestion des data frame
#   - pour chaque colonne :
#      + eventuellement, modifier le type
#      + eventuellement, modifier le nom
#      + appeler la fonction r2latexSingle
#
r2latexUnivData <- function(donnees,nom,classes){
  for (i in 1:length(donnees)){                                       # Pour chaque colonne
    if (!is.na(classes[i])){class(donnees[,i]) <- classes[i]}else{}   # éventuellement, modification de la classe
    if (!is.na(nom[i])){names(donnees)[i] <- nom[i]}else{}            # éventuellement, modification du nom
    r2latexUnivSingle(donnees[,i],nom=names(donnees)[i])              # appelle de la fonction d'affichage LaTeX
  }
}


#############################
# Définition générale de r2latexSingle
r2latexUnivSingle <- function(donnees,nom="SansNom"){UseMethod("r2latexUnivSingle")}


#############################
# Méthode de r2latexSingle : integer
#
r2latexUnivSingle.integer <- function(donnees,nom){
  debutTableau("|c|c|c|","{\\bf Effectifs} & {\\bf Indices} & {\\bf Histogramme}")
  afficheEffectifModalites(donnees,"&\n")
  afficheSummary(donnees,"&\n")
  afficheBarplot(donnees,nom,"\\\\ \\hline \n")
  afficheEffectifTotal(donnees,3,"\\\\ \\hline")
  finTableau(nom," (variable dicrète)")
}
#r2latexUniv(dn$int1,fichier="toto.tex")


#############################
# Méthode de r2latexSingle : numeric
#
r2latexUnivSingle.numeric <- function(donnees,nom){
  debutTableau("|c|cc|","{\\bf Indices} & {\\bf Box Plot} & {\\bf Histogramme}")
  afficheSummary(donnees,"&\n")
  afficheBoxplot(donnees,nom,"&\n")
  afficheHist(donnees,nom,"\\\\ \\hline \n")
  afficheEffectifTotal(donnees,3,"\\\\ \\hline")
  finTableau(nom," (variable continue)")
}         
#r2latexUniv(dn$num1,fichier="toto.tex")

#############################
# Méthode de r2latexSingle générique pour les nominale, ordonnée et booleenne
#
r2latexUnivSingle.qualit <- function(donnees,nom,typeDonnees){
  debutTableau("|c|c|","{\\bf Effectif} & {\\bf Histogramme}")
  afficheEffectifModalites(donnees,"&\n")
  afficheBarplot(donnees,nom,"\\\\ \\hline \n")
  afficheEffectifTotal(donnees,2,"\\\\ \\hline")
  finTableau(nom,typeDonnees)
}

#############################
# Méthode de r2latexSingle : nominale
#
r2latexUnivSingle.factor <- function(donnees,nom){
  r2latexUnivSingle.qualit(donnees,nom,"(variable nominale)")
}

#############################
# Méthode de r2latexSingle : nominale
#
r2latexUnivSingle.ordered <- function(donnees,nom){
  r2latexUnivSingle.qualit(donnees,nom,"(variable ordonnée)")
}

#############################
# Méthode de r2latexSingle : nominale
#
r2latexUnivSingle.logical <- function(donnees,nom){
  r2latexUnivSingle.qualit(donnees,nom,"(variable booleenne)")
}



#############################################################################
################################### Tests ###################################
#############################################################################

##################################
# Définition des données test
dn <- data.frame(
  nom1 = rep(c("H","F"),5),
  ord1 = ordered(c(rep(c("A","B","C"),3),"B")),
  int1 = as.integer(c(1,2,2,3,3,3,3,4,4,5)),
  int2 = c(1,2,2,3,3,3,3,4,5,10),
  bol1 = rep(c(TRUE,FALSE),5),
  bol2 = rep(c(TRUE,FALSE),each=5),
  num1 = rnorm(10,3,1),
  num2 = round(runif(10,0,10),1)
)
dn1 <- dn[,3:4]
tty <- c("integer","integer")
tyy <- c("numeric","integer")
v1<-dn[,3]
v2<-dn[,4]

# quelques tests :
r2latexUniv(v1)
r2latexUniv(v2)
r2latexUniv(v1,fichier="riri.tex")
r2latexUniv(dn1,nom=c("A","B"),fichier="fifi.tex")
r2latexUniv(dn1,nom=c("A","B"),classes=c("integer","integer"),fichier="loulou.tex")

a <- r2latexUniv # juste un racourci pour faire des tests


D'autres critiques "musclées", mais au combien justes et poussant dans le bon sens ?


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité