Articles - R

R2DOCX : Cr?er un document word avec R

  |   3480  |  R


    Deux possibilit?s pour g?n?rer un document word. Soit avec Knitr et pandoc ou avec R2DOCX.

    Pandoc : Convertir un document Markdown vers d'autres formats



    Pour plus de d?tails cliquez-ici

    La fonction pandoc() est incluse dans le package knitr (version 1.2) permettant de convertir des documents Markdown ? d'autres formats tels que Latex/PDF, HTML et word (.doc, .docx).

    Cette fonction permet juste d?ex?cuter de mani?re simple la ligne de commande suivante:
    Code R :
     
    FILE <- "example"
    system(paste0("pandoc -o ", FILE, ".docx ", FILE, ".md"))
     



    Pour le fichier.md, le chemin absolu est necessaire.
    Utilisez donc la commande :
    Code R :
     
    commande<-paste("pandoc -o ",  "myfile.docx ", getwd(), "/myfile.md ", sep="")
    system(commande)
     



    Pour installer pandoc suivre ce lien

    Utilisation simple

    Code R :
     
    library(knitr)
    pandoc('foo.md', format='html')  # HTML
    pandoc('foo.md', format='latex') # LaTeX/PDF
    pandoc('foo.md', format='docx')  # MS Word
    pandoc('foo.md', format='odt')   # OpenDocument
     



    Cr?er un document word avec R2DOCX



    R2DOCX permet de cr?er, de mani?re simple, un document word ? partir d'un template ou pas, d'ins?rer des graphiques et des tables.

    Une documentation est compl?te est fournie ici
    Un exemple est montr? ici

    Installation



    Compatibilit? R >= 3.0

    Code R :
     
    install.packages("devtools")
    devtools::install_github('R2DOC', 'davidgohel')
    devtools::install_github('R2DOCX', 'davidgohel')
     


    Pour les utilisateurs de Mac :

    Code R :
     
    Sys.setenv(NOAWT=1) #prevents usage of awt.[http://cran.r-project.org/doc/manuals/r-devel/R-admin.html#Java-_0028OS-X_0029]
    install.packages("devtools")
    devtools::install_github('R2DOC', 'davidgohel')
    devtools::install_github('R2DOCX', 'davidgohel')
     



    Les fonctions disponibles


    • addPlot pour ajouter un graphique.
    • addParagraph pour ajouter un paragraphe de textes
    • addTable pour ajouter des tables.
    • addHeader pour ajouter des titres.
    • addTOC pour ajouter une table des mati?res.
    • addPageBreak pour ajouter un saut de page.
    • addLineBreak pour ajouter un saut de ligne.
    • replaceText pour remplacer du texte.


    Votre premier document



    Code R :
     
    Sys.setenv(NOAWT=1) #prevents usage of awt - required on Mac
    library(R2DOCX)
    # Nom du fichier ? cr?er
    docx.file <- "document.docx"
    # Objet Docx ? manipuler
    doc <- new ("Docx", title = "My example" )
    #ajouter une table
    doc = addTable( doc, iris[1:10,] )
    # Ajouter du texte
    doc <- addParagraph( doc, value = "Hello World!", stylename = "Normal" )
    # ajouter un graphique
    doc = addPlot( doc, function() plot( rnorm(10), rnorm(10) )
                   , width = 10, height = 8
    )
    # Ecriture du fichier 
    writeDoc( doc, docx.file )
     


    Cr?er un document word ? partir d'un template


    Code R :
     
    # document word ? cr?er
    docx.file = "document.docx"
    # Document word ? utiliser comme template
    template.file = file.path( find.package("R2DOCX"), "templates/TEMPLATE_01.docx", fsep = "/" )
    # Cr?er un nouveau objet
    doc = new("Docx"
    , title = "My example" 
    , basefile = template.file
    )
    # Dans le document de base, 2 mots cl?s existent- Rempla?ons les
    doc = replaceText( doc, pattern = "AUTHOR", replacement = "John Doe" )
    doc = replaceText( doc, pattern = "DATE", replacement = date() )
     



    Titre principal



    Code R :
     
    #Titre principale
    #**************************************
    doc = addParagraph( doc, value = "Exemple", stylename = "TitleDoc" )
    doc = addPageBreak( doc ) #saut de page
     




    Table des mati?res



    Code R :
     
    #Table des mati?re (table of content : TOC)
    #**************************************
    #On vous demandera de mettre ? jour la table de mati?res
    #la pr?mi?re fois que le document sera ouvert
    doc = addHeader(doc, "Table des mati?res", 1);
    doc = addTOC(doc)
    doc = addPageBreak( doc )#saut de page
     




    Ajout de textes (Normal et liste)



    Code R :
     
    # Ajout de textes (normal and liste)
    #**************************************
    doc = addHeader(doc, "Dataset presentation", 1);
    #texte normal
    doc = addParagraph( doc, value = "Dataset 'measured.weights' is set of weights measurements collected on few people before savate training.", stylename = "Normal" )
    #liste non ordonn?e
    texts = c( "Column 'gender' is the subject gender." 
               , "Column 'id' is the unique subject identifier." 
               , "Column 'cat' is the subject weight category." 
               , "Column 'competitor' tells wether or not subject practice competition." 
               , "Column 'day' is the day of measurement." 
               , "Column 'weight' is the measured weight." 
    )
    doc = addParagraph( doc, value = texts, stylename = "BulletList" )
     




    Formatage conditionnel du texte



    La fonction addParagraph permet d'ajouter simplement du texte comme montr? ci-dessus. Elle peut ?galement ?tre utilis?e pour faire du remplacement de textes et du formatage conditionnel.

    Code R :
     
    # template text
    x = "[animal] eats [food]."
    # define formatting properties for replacement text ? see chapter "styles"
    textProp = textProperties( color = "blue" )
    replacement.styles = list( animal= textProp, food= textProp )
    # define replacement text
    replacements = list( animal = "donkey", food = "grass" )
    doc <- addParagraph( doc, value = x, stylename = "Normal"
                         , replacements = replacements
                         , replacement.styles = replacement.styles
    )
     




    La fonction textProperties
    Code R :
    textProperties(color = "black", font.size = 10
    , font.weight = "normal", font.style = "normal"
    , font.family = "Arial" )


    color: couleur de la police; font.size: taille en pixel; font.weight : "normal" ou "bold"; font.style: "normal" ou "italic"; font.family: police.

    Ajouter une table



    Table simple:

    Code R :
     
    # Ajouter une table
    #**************************************
    # Table utilisee
    data( measured.weights )
    doc = addHeader(doc, "Dataset", 1);
    doc = addHeader(doc, "Dataset first lines", 2);
    #Table simple
    doc = addTable( doc
                    , data = head( measured.weights, n = 10 )
                    , formats = get.light.formats()
    )
    doc = addLineBreak( doc )#saut de ligne
     




    Renommer les ent?tes de la table:

    Avant d'avoir renomm? :

    Code R :
     
    doc = addTable( doc, data = weights.summary)
     




    Apr?s avoir renomm? :

    Code R :
     
    doc = addTable( doc
    , data = weights.summary
    , header.labels = list("id" = "Subject Identifier", "avg.weight" = "Average Weight"
    , "regularity" = "Regularity", "visit.n" = "Number of visits", "last.day" = "Last visit"
    ) # columns labels to display
    )
     




    Table simple personnalis?e avec fusion des lignes :

    Dans la table ci-dessous, les lignes sont fusionn?es sur la colonne 'day'. La colonne 'gender' est color?e en fonction du genre.

    Code R :
     
    # simple addTable with row merging on 'day' column
    doc = addHeader(doc, "Dataset last lines", 2);
    sampledata = tail( measured.weights[ order(measured.weights$day), ], n = 20 )
    doc = addTable( doc
    , data = sampledata
    , span.columns = c("day")
    , col.colors = list( "gender" = ifelse( sampledata$gender == "male" , "#00c2ff", "#ffcdd1") )
    )
     




    Table personnalis?e avec ent?tes group?es:

    Dans cette table les ent?tes ont ?t? renomm?es, des ent?tes group?es sont cr?es, le type des colonnes est pr?cis? (%, entier, caract?re, nombre d?cimal, date). Les valeurs de la colonne "Regularity" ont ?t? color?es en fonction de la valeur (couleur grise si < 0.5 et bleu si >= 0.5).

    Code R :
     
    # customized table
    doc = addHeader(doc, "Dataset summary", 1);
    doc = addTable( doc
    , data = weights.summary
    , header.labels = list("id" = "Subject Identifier", "avg.weight" = "Average Weight"
    , "regularity" = "Regularity", "visit.n" = "Number of visits", "last.day" = "Last visit"
    ) # columns labels to display
    , grouped.cols=list( "id" = "id"
    , "Summary" = c( "avg.weight",  "regularity", "visit.n", "last.day" ) 
    ) # grouped headers line to add before headers line
    , col.types = list( "id" = "character", "avg.weight" = "double"
    , "regularity" = "percent", "visit.n" = "integer"
    , "last.day" = "date" ) # reporting types of each columns 
    , col.fontcolors = list( "regularity" = ifelse( weights.summary$regularity < 0.5 , "gray", "blue") ) # customized font colors for column "regularity"
    )
     




    Ajouter un graphique



    Code R :
     
    # Ajouter un grahique
    #**************************************
    doc = addPageBreak( doc )
    doc = addHeader(doc, "Graphics", 1);
    doc = addPlot( doc,
                   function() boxplot(measured.weights$weight ~ measured.weights$id,
                                      xlab = "Subjects", ylab = "Weights" , col = "#0088cc",
                                      legend = "My boxplot"),
                   width=7, height=7
                  )
     




    Remplacement de texte



    Pour remplacer le mot cl? "AUTHOR", dans le document word, avec "Pearson" :

    Code R :
     
    doc = replaceText( doc, "AUTHOR", "Pearson")
     


    Les styles de titres disponibles dans votre document



    Code R :
     
    doc <- new("Docx", title = "My example" )
    styles( doc )
    # [1] "Normal"                  "Titre1"                  "Titre2"                 
    # [4] "Titre3"                  "Titre4"                  "Titre5"                 
    # [7] "Titre6"                  "Titre7"                  "Titre8"                 
    #[10] "Titre9"                  "Policepardfaut"          "TableauNormal"          
    # ...
    doc <- setHeaderStyle(doc, stylenames = c("Titre1", "Titre2", "Titre3", "Titre4", "Titre5", "Titre6", "Titre7", "Titre8", "Titre9" ) ) 
    doc = addHeader( doc, "title 1", 1 )
     



    Un document word complet



    Le script complet utilis? pour cr?e le document word suivant est t?l?chargeable ici : R2DOCX.r

    Document word complet

    Voir Aussi



    R2XLSX : lire, ?crire et formater un document Excel dans R

    Licence - Pas d?Utilisation Commerciale - Partage dans les M?mes Conditions
    Licence Creative Commons