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.

17
demandé sur Mike Williamson 2016-04-10 03:07:11

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

  1. copié et collé animated_choropleth.html dans un vide .Mdm
  2. supprimer les références à cloudfare.com comme j'avais des problèmes d'accès le rendu (voir ci-dessous)
  3. knit HTML
  4. mettre les cloudfare liens web
  5. mettre les graphiques dans le même dossier que le rendu html
  6. 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
10
répondu chinsoon12 2016-04-11 01:32:37

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.

2
répondu thbtmntgn 2018-02-15 02:04:18

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)

-2
répondu user3749036 2018-01-25 14:38:28