R fait du la tex

  • 3,436 views
Uploaded on

Faire du latex sous R sans Sweave, par Franck Arnaud …

Faire du latex sous R sans Sweave, par Franck Arnaud
Visit http://fltaur.wordpress.com/

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,436
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
18
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. R fait du LaTeX Franck ARNAUDGroupe dUtilisateurs de R Mercredi 8 février 2011
  • 2. R & LaTeX – Principe général●Intérêt : automatiser des opérations répétitives (cahier devariantes, simulation, évaluation de modèles) → Utile dinterfacer R et LaTeX.Hors-champ : création automatique de discours●Méthode :●● Les analyses statistiques sont lancées dans R● Les résultats sont exportés sous forme de tableaux, graphiques, et de textes● LaTeX les compile → PDF
  • 3. R & LaTeX – Exemple
  • 4. R et LaTeX – Schéma densembleSchéma en trois temps :● ● R crée les objets individuels (tableaux, graphiques, textes) Output : fichiers eps, fichiers tex ● R crée le code LaTeX qui agence les objets individuels Output : fichier(s) tex, qui appelle les précédents ● Puis on compile le code LaTeX Output : fichier pdfLa cerise sur le gâteau :● ● R lance la compilation et laffichage du PDF → pénible une fois
  • 5. R & LateX – Créer un graphiqueExport de graphiques au format eps :●postscript(file="fig1.eps",horizontal=TRUE,width=8,height=5)graphe(individu1)dev.off()Nhésitez pas à utiliser les possibilités dagence de graphes :●● Simple : par(mrow=c(1,2))● Plus complexe : layout(matrix=c(1,1,2,1,1,3,4,5,6),3,3,byrow=TRUE)
  • 6. R & LateX – Créer un tableauFonction latex du package MASS●Mais ça peut sécrire à la main, si on veut personnaliser :●latextab<-function(tab,file){ sink(file) cat("begin{table}[!htbp]begin{center}") cat("begin{tabular}{c|",rep("c",ncol(tab)),"}n",sep="") cat(NULL,colnames(tab),sep=" & ") cat(" nhline") fff<-function(x) paste( paste(x,collapse=" & "), "") cat(apply(cbind(rownames(tab),tab),1,fff),sep="n") cat("hlinenend{tabular}end{center}end{table}n") sink()}
  • 7. R et LaTeX – Exemple de tableau●Exemple ad hoc :tab<-matrix(1:8,ncol=4)colnames(tab)<-paste("Col",1:ncol(tab),sep="")rownames(tab)<-paste("Ind",1:nrow(tab),sep="")latextab(tab,file="test.tex")●Output : le fichier test.texbegin{table}[!htbp]begin{center}begin{tabular}{c|cccc} & Col1 & Col2 & Col3 & Col4hlineInd1 & 1 & 3 & 5 & 7 Ind2 & 2 & 4 & 6 & 8 hlineend{tabular}end{center}end{table}●On peut ajouter des captions, des labels, etc.
  • 8. R et LaTeX – Adapter du texte (1)Le message → fichier pattern.txt :● Lindividu %@IDNOM@% a débuté son activité lannée %@ANDEB@%. Illiquide sa carrière lannée %@ANFIN@% avec %@NTVAL@% trimestresvalidés dont %@NTCOT@% trimestres cotisés. La première année, sa pensionvaut %@NIVPENS@%, ce qui représente %@TXREMPLDERN@% de sondernier salaire.Ensuite, on remplace chaque identifiant par une valeur●●On peut enrichir avec des comportements particuliers →écriture totalement automatique de rapports
  • 9. R et LaTeX – Adapter du texte (2)Transformation du message :●transformation<-function(message_init,id_correspondance){ message_trans<-message_init debut<-gregexpr(pattern="%@",message_init)[[1]] fin<-gregexpr(pattern="@%",message_init)[[1]] n<-length(debut) for (i in seq_along(debut)) { catch<-substr(message_init,debut[i]+2,fin[i]-1) remplac<-as.character(correspondance[3,catch]) message_trans<-sub(pattern=paste("%@",catch,"@%",sep=""),rep=remplac,x=message_trans) } return(message_trans)}Fonction globale :●R2LaTeX_text<-function(file_message,id_correspondance,file){ message<-readLines(file_message) sink(file) cat(transformation(message_init=message, id_correspondance=id_correspondance)) sink()}
  • 10. R et LaTeX – Adapter du texte (3)●La table de correspondance :correspondance<-read.table(file=stdin(),sep=";",header=TRUE)IDNOM;SEXE;ANDEB;ANFIN;NTVAL;NTCOT;NIVPENS;TXREMPLDERN;NBENFHerbert Léonard;H;1965;2005;165;160;1850;60%;NAPatrick Juvet;H;1972;2008;142;127;1250;65%;2Wanda Maria Ribeiro Furtado Tavares deVasconcelos;F;1982;2018;180;150;1800;50%;5transformation<-function(message_init,id_correspondance)●On applique la fonction à un individu :id_indiv<-3R2LaTeX_text(file_message="pattern.txt",id_correspondance=id_indiv,file=paste("Indiv",id_indiv,"resume.tex",sep=""))●Output :Lindividu Wanda Maria Ribeiro Furtado Tavares de Vasconcelos a débuté sonactivité lannée 1982. Il liquide sa carrière lannée 2018 avec 180 trimestresvalidés dont 150 trimestres cotisés. La première année, sa pension vaut 1800,ce qui représente 50% de son dernier salaire.
  • 11. R & LaTeX – Structure globaleOn commence par créer tous les tableaux et graphiques :●pps<-function(file) postscript(file=file,horizontal=TRUE,width=8,height=5)for (i in 1:n_indiv){ individu<-get(paste("indiv",i,sep="") pps(file=paste("fig",i,".eps",sep="")) graphe(individu) dev.off() latextab(tableau(individu),file=paste("tab",i,".tex",sep=""))}Puis on insère tout ça dans un fichier global :●sink("global.tex")for (i in 1:n_indiv){ cat("section*{Résumé de lindividu ",i,"}n") cat("includegraphics{fig",i,"}n",sep="") cat("input{tab",i,"}n",sep="") cat("clearpagen")}sink()
  • 12. R & LaTeX - FinalLe fichier compilé se compose, outre le préambule, de :begin{document}input{global.tex}end{document}Il nest pas inutile de dater les fichier de sortie ou les tableaux :temps<-Sys.time() #class(temps);?format.POSIXctjour<-format(temps,"%A %d %B %Y")heure<-format(temps,"%Hh%Mm%Ss")cat("Tableau créé le",jour,"à",heure)
  • 13. R & LaTeX – Ze cherry on ze cake● R lance la compilation LaTeX : ● Fichier bat : set path=C:/Progra~1/MiKTeX~1.9/miktex/bin;C:Progra~1gsgs8.70bin latex --src -interaction=nonstopmode -include-directory "F:PretImmoLaTeX" %1.tex dvips -P pdf "%1.dvi" gswin32c.exe -sPAPERSIZE=a4 -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile="%1.pdf" -c save pop -f "%1.ps" ● Exécution du fichier bat : system(command=paste("compil.bat",fichier))● R ouvre Acrobat Reader : system(paste("C:/Progra~1/Adobe/Reader~1.0/Reader/AcroRd32.exe",fichier,".pdf",sep=""),wait=FALSE)● Difficulté : adapter les chemins à linstallation
  • 14. R & LaTeX – Zi endMerci de votre attention Des questions ?