Inclure des fichiers HTML dans le fichier Markdown R?
Sommaire
Comment puis-je placer des fichiers HTML au lieu de dans un fichier R Markdown?
Détails
j'ai créé quelques belles cartes choropleth animées via choroplethr.
comme le montre le lien, la fonction choropleths animée via la création d'un ensemble D'images PNG, qui sont ensuite roulées dans un fichier HTML qui tourne à travers les images, pour montrer l'animation. Fonctionne très bien, ressemble beaucoup.
mais maintenant je veux intégrer / incorporer ces pages dans le .Dossier Rmd, de sorte que j'ai un rapport holistique comprenant ces choropleths animés, avec 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 exactement ce que je veux: une référence qui est "gonflée" pour mettre l'information lieu, au lieu de simplement comme un lien. Comment puis-je faire cela avec un fichier HTML complet au lieu d'une simple image? Est-il de toute façon?
explication via L'exemple
disons que mon fichier HTML choropleth vit dans mon chemin local à './animations/demographics.html'
, et j'ai un R Markdown fichier de la forme:
---
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 assumé / fait semblant que !!
est l'antécédent qui fera exactement ce que je veux: permettez-moi d'intégrer ce fichier HTML en ligne avec le reste du rapport.
mise à jour
Deux mises à jour. Plus récemment, je n'ai toujours pas réussi à faire marcher les choses, alors j'ai poussé tout ça à un GitHub au cas où quelqu'un est prêt à m'aider à régler le problème. Vous trouverez de plus amples détails dans le fichier Readme de ce repo.
il semble que pouvoir intégrer du HTML dans un fichier R Markdown serait incroyablement utile, donc je continue d'essayer de le trier.
(Âgés de les commentaires)
selon certaines des suggestions utiles, j'ai essayé et j'ai échoué dans le fichier Markdown R:
méthode brillante:
```{r showChoro1}
shiny::includeHTML("./animations/demographics.html")
```
(j'ai aussi ajouté runtime:Shiny
dans la portion YAML.)
htmltools
méthode:
```{r showChoro1}
htmltools::includeHTML("./animations/demographics.html")
```
(dans ce cas, je n'ai pas fait de changements à la YAML.)
Dans le premier cas (Shiny
), cela n'a pas fonctionné du tout. En fait, y compris le HTML semble brouiller les fonctionnalités de la document, telles que l'exécution semblait perpétuellement pas complètement fonctionnel. (En bref, alors qu'il semblait tout charger, la broche de "chargement" n'a jamais disparu.)
Dans ce dernier cas, rien d'autre a foiré, mais c'était une image brisée. Étrangement, il y avait un ruban" choropleth player " en haut du document qui marcherait, c'est juste qu'aucune des images n'apparaîtrait.
pour ma propre santé mentale, j'ai aussi fourni des liens simples, qui a bien fonctionné.
[This link](./animations/demographics.html) worked without a problem, except that it is not embedded, as I would prefer.
Donc, c'est clairement un défi à l'intégration.
3 réponses
voici un hack (probablement inélégant)...idea est d'insérer directement HTML programmatically dans Rmd puis de rendre Rmd.
temp.Mdm fichier:
---
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
de test.fichier 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 le code HTML et ensuite rendre (peut probablement être raccourci par 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 aussi avec les fichiers que j'ai fournis. Est-ce parce que votre html particulier ne comme L'encodage UTF8?
EDIT: en prenant @MikeWilliamson des commentaires dans les commentaires
j'ai essayé le suivant
- copié et collé animated_choropleth.html dans un vide .Mdm
- supprimer les références à cloudfare.com comme j'avais des problèmes d'accès le rendu (voir ci-dessous)
- knit HTML
- mettre les cloudfare liens web
- mettre les graphiques dans le même dossier que le rendu html
- ouvrir le HTML
j'apparais pour récupérer le code html, mais je suis pas sûr si le résultat est ce que vous attendez
faites-vous également face au même problème dans le pt 2? Vous pourriez vouloir poster le message d'erreur et demander des corrections :). 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é le comprend: option 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 dans le corps avant/après.
peut essayer de mettre cette ligne dans le Rmarkdown puis tricoter. (YAML en-tête "de sortie: html_document"; si "runtime: brillant" en quelque sorte, il ne fonctionne pas)