Comment placer des fichiers HTML en place dans un fichier R Markdown?
J'ai créé quelques jolies cartes choroplèthes animées via choroplethr .
Comme le montre le lien, les choroplèthes animés fonctionnent en créant un ensemble d'images PNG, qui sont ensuite roulées dans un fichier HTML qui parcourt les images, pour afficher l'animation. Fonctionne très bien, a fière allure.
Mais maintenant, je veux incorporer/incorporer ces pages dans le fichier .Rmd, afin d'avoir un rapport holistique comprenant ces choroplèthes animés, ainsi que d'autres travaux.
Il me semble qu'il devrait y avoir un moyen facile de faire un équivalent à
Liens:
[please click here](http://this.is.where.you.will.go.html)
ou
Images:
![cute cat image](http://because.that.is.what.we.need...another.cat.image.html)
Le chemin des images est précisément ce que je veux: une référence qui soit "gonflée" pour mettre en place l'information, au lieu d'être un simple lien. Comment puis-je le faire avec un fichier HTML complet au lieu d'une simple image? Y a-t-il un moyen?
Disons que mon fichier HTML choroplèth se trouve dans mon chemin local à './animations/demographics.html'
, et j'ai un fichier R Markdown comme:
---
title: 'Looking at the demographics issue'
author: "Mike"
date: "April 9th, 2016"
output:
html_document:
number_sections: no
toc: yes
toc_depth: 2
fontsize: 12pt
---
# Introduction
Here is some interesting stuff that I want to talk about. But first, let's review those earlier demographic maps we'd seen.
!![demographics map]('./animations/demographics.html')
où j'ai supposé/prétendu que !!
est l'antécédent qui fera exactement ce que je veux: permettez-moi d'incorporer ce fichier HTML en ligne avec le reste du rapport.
Deux mises à jour. Plus récemment, je ne pouvais toujours pas faire fonctionner les choses, j'ai donc poussé tout cela jusqu'à un référentiel GitHub , au cas où quelqu'un serait disposé à m'aider à résoudre le problème. Plus de détails peuvent être trouvés dans le fichier Lisez-moi de ce dépôt.
Il semble que pouvoir incorporer du HTML dans un fichier R Markdown serait incroyablement utile, donc je continue d'essayer de le trier.
(Commentaires plus anciens)
Selon certaines des suggestions utiles, j'ai essayé et échoué ce qui suit dans le fichier R Markdown:
Méthode brillante:
```{r showChoro1}
shiny::includeHTML("./animations/demographics.html")
```
(J'ai également ajouté runtime:Shiny
up dans la partie YAML.)
htmltools
méthode:
```{r showChoro1}
htmltools::includeHTML("./animations/demographics.html")
```
(Dans ce cas, je n'ai apporté aucune modification au YAML.)
Dans le premier cas (Shiny
), cela ne fonctionnait pas du tout. En fait, y compris le code HTML semblait avoir complètement détruit la fonctionnalité du document, de sorte que le runtime ne semblait pas toujours pleinement fonctionnel. (Bref, alors qu'il semblait tout charger, le fuseau de "chargement" ne s'en allait jamais.)
Dans ce dernier cas, rien d'autre n'a été gâché, mais c'était une image cassée. Étrangement, il y avait un ruban "joueur de choroplète" en haut du document qui fonctionnait, c'est juste qu'aucune des images n'apparaissait.
Pour ma propre raison, j'ai également fourni des liens simples, qui fonctionnaient bien.
[This link](./animations/demographics.html) worked without a problem, except that it is not embedded, as I would prefer.
C'est donc clairement un défi avec l'intégration.
Voici un hack (probablement inélégant) ... l'idée est d'insérer directement HTML par programmation dans Rmd puis de rendre Rmd.
fichier temp.Rmd:
---
title: "Introduction"
author: "chinsoon12"
date: "April 10, 2016"
output: html_document
---
<<insertHTML:[test.html]
etc, etc, etc
```{r, echo=FALSE}
htmltools::includeHTML("test.html")
```
etc, etc, etc
fichier test.html:
<html>
<head>
<title>Title</title>
</head>
<body>
<p>This is an R HTML document. When you click the <b>Knit HTML</b> button a web page will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:</p>
<p>test test</p>
</body>
</html>
code verbeux pour remplacer le code Rmd par du code HTML, puis rendu (peut probablement être raccourci de beaucoup)
library(stringi)
subHtmlRender <- function(mdfile, htmlfile) {
#replace <<insertHTML:htmlfile with actual html code
#but without beginning white space
lines <- readLines(mdfile)
toSubcode <- paste0("<<insertHTML:[",htmlfile,"]")
location <- which(stri_detect_fixed(lines, toSubcode) )
htmllines <- stri_trim(readLines(htmlfile))
#render html doc
newRmdfile <- tempfile("temp", getwd(), ".Rmd")
newlines <- c(lines[1:(location-1)],
htmllines,
lines[min(location+1, length(lines)):length(lines)]) #be careful when insertHTML being last line in .Rmd file
write(newlines, newRmdfile)
rmarkdown::render(newRmdfile, "html_document")
Shell(gsub(".Rmd",".html",basename(newRmdfile),fixed=T))
} #end subHtmlRender
subHtmlRender("temp.Rmd", "test.html")
EDIT: htmltools :: includeHTML fonctionne également avec les exemples de fichiers que j'ai fournis. Est-ce parce que votre html particulier n'aime pas le codage UTF8?
EDIT: prise en compte des commentaires @MikeWilliamson
J'ai essayé ce qui suit
Il me semble que je récupère le HTML mais je ne sais pas si le résultat est ce que vous attendez
Êtes-vous également confronté au même problème dans le pt 2? Vous voudrez peut-être publier le message d'erreur et demander des correctifs :). C'était mon message d'erreur
pandoc.exe: Failed to retrieve http://cdnjs.cloudflare.com/ajax/libs/Twitter-bootstrap/3.1.1/css/bootstrap.min.css
FailedConnectionException2 "cdnjs.cloudflare.com" 80 False getAddrInfo: does not exist (error 11001)
Error: pandoc document conversion failed with error 61
Avez-vous essayé l'option inclut: dans votre en-tête YAML?
https://rmarkdown.rstudio.com/html_document_format.html#includes
Mais peut-être que vous aurez le même problème que moi: j'aimerais inclure le fichier HTML dans une section spécifique de mon document RMarkdown, pas dans l'en-tête ou le corps avant/après.