71 votes

Comment convertir R Markdown en HTML ? En d'autres termes, que fait "Knit HTML" dans Rstudio 0.96 ?

Quelles commandes sont exécutées lorsque l'on appuie sur "Knit HTML" sur un fichier R Markdown dans Rstudio 0.96 ?

Ma motivation est que je pourrais vouloir exécuter la même commande lorsque je suis dans un autre environnement d'édition de texte ou que je pourrais vouloir combiner la commande dans une plus grande makefile .

1 votes

Je n'en suis pas sûr, mais je pense que c'est une combinaison de l'utilisation de knit pour convertir R Markdown en Markdown, puis de quelque chose comme pandoc pour convertir en html. Ou peut-être que RStudio fait la conversion en html. Mais pandoc est assez facile à utiliser et pourrait être facilement ajouté dans un makefile.

2 votes

J'ai légèrement mis à jour le titre en "Comment convertir R Markdown en HTML" et mis la partie RStudio à la fin du titre en supposant que les gens sont plus susceptibles de chercher sur Google "comment convertir R Markdown en HTML".

64voto

Jeromy Anglim Points 8325

script

Donc maintenant que le R markdown Le paquet a été publié Voici un code permettant de reproduire les caractéristiques de Knit en Html.

require(knitr) # required for knitting from rmd to md
require(markdown) # required for md to html 
knit('test.rmd', 'test.md') # creates md file
markdownToHTML('test.md', 'test.html') # creates html file
browseURL(paste('file://', file.path(getwd(),'test.html'), sep='')) # open file in browser 

donde test.rmd est le nom de votre fichier R markdown. Notez que je ne suis pas sûr à 100 % de la ligne browseURL (d'où ma question ici au sujet de ouvrir des fichiers dans un navigateur web ).

Options markdownToHTML

La bonne chose à propos de markdownToHTML c'est qu'il y a des tas d'options dans la façon dont le HTML est créé (cf. ?markdownHTMLOptions ). Ainsi, par exemple, si vous voulez juste un fragment de code sans toutes les informations d'en-tête, vous pouvez écrire :

markdownToHTML('test.md', 'test.html', options='fragment_only')

ou si vous n'aimez pas le hard wrapping (c'est-à-dire l'insertion de sauts de ligne lorsqu'il y a des sauts de ligne manuels dans la source markdown), vous pouvez omettre l'option 'hard_wrap'.

# The default options are 'hard_wrap', 'use_xhtml', 
#      'smartypants', and 'base64_images'.
markdownToHTML('test.md', 'test.html', 
       options=c('use_xhtml', 'base64_images'))

Makefile

Tout ceci pourrait aussi être ajouté à un makefile en utilisant peut-être Rscript -e (par exemple, quelque chose comme ceci ). Voici un exemple basique de makefile que j'ai mis en place, où test indique que le fichier rmd est appelé test.rmd .

RMDFILE=test

html :
    Rscript -e "require(knitr); require(markdown); knit('$(RMDFILE).rmd', '$(RMDFILE).md'); markdownToHTML('$(RMDFILE).md', '$(RMDFILE).html', options=c('use_xhtml', 'base64_images')); browseURL(paste('file://', file.path(getwd(),'$(RMDFILE).html'), sep=''))"

Le makefile utilise mes options markdown préférées : c'est-à-dire, options=c('use_xhtml', 'base64_images')

4 votes

Maintenant la réponse est donnée par options(rstudio.markdownToHTML=... rstudio.com/ide/docs/authoring/markdown_custom_rendering

2 votes

Plutôt que d'utiliser markdownToHTML, knitr semble maintenant utiliser rmarkdown::render(), voir la note ici : rforge.net/doc/packages/knitr/knit2html.html

43voto

Yihui Points 9906

Mettez Sys.sleep(30) dans un chunk et vous verrez clairement quelles commandes sont appelées par RStudio. En gros, elles sont

  1. library(knitr); knit() pour obtenir le fichier markdown ;
  2. RStudio dispose de fonctions internes pour convertir le format markdown en HTML ;

La deuxième étape sera plus transparente dans la prochaine version de l'outil d'évaluation de la qualité de l'eau. démarque inconnue paquet. Actuellement, vous pouvez utiliser knitr::knit2html('your_file.Rmd') pour obtenir un fichier HTML similaire à celui que RStudio vous donne.


Mise à jour le 17 septembre 2019 : La réponse ci-dessus s'applique à RStudio v0.96 (année 2012). Maintenant, R Markdown est compilé par rmarkdown::render() qui utilise Pandoc au lieu de l'ancien paquet R. démarque inconnue . Voir l'article Relation entre R Markdown, Knitr, Pandoc et Bookdown pour plus de détails.

2 votes

J'ai un exemple pour lequel knit2html("Report.Rmd", encoding='ISO8859-1') ne produit pas le même html que le bouton de tricotage : il y a un problème d'encodage lorsque j'utilise knit2html . Cependant, lorsque j'appuie sur le bouton de tricotage, je vois effectivement dans le journal que ISO8859-1 est le encoding option. La différence devrait donc résider dans md à html conversion. Le bouton de tricotage utilise-t-il vraiment markdownToHTML ?

0 votes

Je pense que la réponse canonique ici devrait mentionner rmarkdown::render() C'est ainsi que je suis arrivé sur cette page et que j'ai trouvé la réponse à ma question.

0 votes

@MichaelChirico Vous avez raison. Cette réponse a été écrite en 2012, lorsque le rmarkdown le paquet n'était pas encore né ( rmarkdown était ce que je voulais dire par "la prochaine version du paquet markdown"). N'hésitez pas à modifier ma réponse. Merci.

28voto

Harry Points 191

Méthode très simple en ligne de commande à partir de knitr en bref :

R -e "rmarkdown::render('knitr_example.Rmd')"

Cela nécessite rmarkdown à installer avec install.packages(rmarkdown) et que pandoc est installé (apparemment il est fourni avec Rstudio, voir knitr en bref pour plus de détails).

Jusqu'à présent, lorsque je l'ai utilisé, il a placé tous les tracés dans le fichier HTML plutôt que sous forme d'images dans un répertoire de figures et a nettoyé tous les fichiers intermédiaires, le cas échéant, tout comme le fait la compilation dans RStudio.

4voto

Shicheng Guo Points 623

Il semble que vous devriez appeler rmarkdown::render() au lieu de knitr::knit2html() car a.rmd semble être un document R Markdown v2.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X