web-dev-qa-db-fra.com

Inclure des fichiers HTML dans le fichier R Markdown?

Résumé rapide

Comment placer des fichiers HTML en place dans un fichier R Markdown?

Détails

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?

Explication via l'exemple

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.

Mises à jour

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.

19
Mike Williamson

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

  1. copié et collé animated_choropleth.html dans un .Rmd vierge
  2. supprimer les références à cloudfare.com car j'ai eu des problèmes d'accès lors du rendu (voir ci-dessous)
  3. hTML tricoté
  4. remettre ces liens Web cloudfare
  5. mettre les graphiques dans le même dossier que le html rendu
  6. ouvrir le HTML

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
11
chinsoon12

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.

2
thbtmntgn