14

Click here to load reader

R fait du la tex

  • Upload
    cornec

  • View
    3.579

  • Download
    3

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: R fait du la tex

R fait du LaTeX

Franck ARNAUD

Groupe d'Utilisateurs de R

Mercredi 8 février 2011

Page 2: R fait du la tex

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

Page 3: R fait du la tex

R & LaTeX – Exemple

Page 4: R fait du la tex

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

Page 5: R fait du la tex

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)

Page 6: R fait du la tex

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()

}

Page 7: R fait du la tex

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.

Page 8: R fait du la tex

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

Page 9: R fait du la tex

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()

}

Page 10: R fait du la tex

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.

Page 11: R fait du la tex

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()

Page 12: R fait du la tex

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)

Page 13: R fait du la tex

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

Page 14: R fait du la tex

R & LaTeX – Zi end

Merci de votre attention

Des questions ?