View
3.579
Download
3
Category
Preview:
DESCRIPTION
Faire du latex sous R sans Sweave, par Franck Arnaud Visit http://fltaur.wordpress.com/
Citation preview
R fait du LaTeX
Franck ARNAUD
Groupe d'Utilisateurs de R
Mercredi 8 février 2011
R & LaTeX – Principe général●Intérêt : automatiser des opérations répétitives (cahier de variantes, simulation, évaluation de modèles)→ Utile d'interfacer 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
R & LaTeX – Exemple
R et LaTeX – Schéma d'ensemble
●Sché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 pdf
●La cerise sur le gâteau :● R lance la compilation et l'affichage du PDF → pénible une fois
R & LateX – Créer un graphique
●Export de graphiques au format eps :
postscript(file="fig1.eps",horizontal=TRUE,width=8,height=5)graphe(individu1)dev.off()
●N'hésitez pas à utiliser les possibilités d'agence 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)
R & LateX – Créer un tableau
●Fonction 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("\\\\ \n\\hline")fff<-function(x) paste( paste(x,collapse=" & "), "\\\\")cat(apply(cbind(rownames(tab),tab),1,fff),sep="\n")cat("\\hline\n\\end{tabular}\\end{center}\\end{table}\n")sink()
}
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.tex\begin{table}[!htbp]\begin{center}\begin{tabular}{c|cccc} & Col1 & Col2 & Col3 & Col4\\ \hlineInd1 & 1 & 3 & 5 & 7 \\Ind2 & 2 & 4 & 6 & 8 \\\hline\end{tabular}\end{center}\end{table}
●On peut ajouter des captions, des labels, etc.
R et LaTeX – Adapter du texte (1)
●Le message → fichier pattern.txt :L'individu %@IDNOM@% a débuté son activité l'année %@ANDEB@%. Il
liquide sa carrière l'année %@ANFIN@% avec %@NTVAL@% trimestres validés dont %@NTCOT@% trimestres cotisés. La première année, sa pension vaut %@NIVPENS@%, ce qui représente %@TXREMPLDERN@% de son dernier salaire.
●Ensuite, on remplace chaque identifiant par une valeur
●On peut enrichir avec des comportements particuliers → écriture totalement automatique de rapports
R et LaTeX – Adapter du texte (2)●Transformation du message :transformation<-function(message_init,id_correspondance){
message_trans<-message_initdebut<-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()
}
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 de Vasconcelos;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 :L'individu Wanda Maria Ribeiro Furtado Tavares de Vasconcelos a débuté son activité l'année 1982. Il liquide sa carrière l'année 2018 avec 180 trimestres validés dont 150 trimestres cotisés. La première année, sa pension vaut 1800, ce qui représente 50\% de son dernier salaire.
R & LaTeX – Structure globale●On 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 l'individu ",i,"}\n")cat("\\includegraphics{fig",i,"}\n",sep="")cat("\input{tab",i,"}\n",sep="")cat("\\clearpage\n")
}sink()
R & LaTeX - Final
Le fichier compilé se compose, outre le préambule, de :
\begin{document}\input{global.tex}\end{document}
Il n'est 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)
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~1\gs\gs8.70\bin
latex --src -interaction=nonstopmode -include-directory "F:\PretImmo\LaTeX" %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 à l'installation
R & LaTeX – Zi end
Merci de votre attention
Des questions ?
Recommended