Включить HTML файлы в файл R Markdown?

Краткая сводка

Как разместить HTML файлы на месте в файле R Markdown?

Подробнее

Я создал несколько приятных анимированных choropleth-карт через choroplethr.

Как показывает ссылка, анимированные choropleths функционируют путем создания набора PNG-изображений, которые затем перекатываются в HTML файл, который циклически проходит через изображения, чтобы показать анимацию. Отлично работает, отлично выглядит.

Но теперь я хочу вставлять/включать эти страницы в файл .Rmd, так что у меня есть целостный отчет, включающий эти анимированные choropleths, а также другие работы.

Мне кажется, должен быть простой способ сделать эквивалент

Ссылки:

[please click here](http://this.is.where.you.will.go.html)

или

Изображения:

![cute cat image](http://because.that.is.what.we.need...another.cat.image.html)

Путь к изображениям - это именно то, что я хочу: ссылка, которая "взорвана", чтобы помещать информацию вместо нее, а не как ссылку. Как я могу сделать это с полным HTML файлом, а не только с изображением? Есть ли способ?

Объяснение с помощью примера

Скажем, мой choropleth HTML файл живет в моем локальном пути в './animations/demographics.html', и у меня есть файл R Markdown, например:

---
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 review those earlier demographic maps we'd seen.

!![demographics map]('./animations/demographics.html')

где я предположил/сделал вид, что !! является антецедентом, который будет делать именно то, что я хочу: позвольте мне встроить этот HTML файл в соответствие с остальной частью отчета.

Обновления

Два обновления. Совсем недавно я все еще не мог заставить работать, поэтому я подтолкнул все это к

(я также добавил runtime:Shiny вверх в части YAML.)

htmltools:

```{r showChoro1}
htmltools::includeHTML("./animations/demographics.html")
```

(В этом случае я не внес изменений в YAML.)

В первом случае (Shiny) он вообще не работал. Фактически, в том числе HTML, казалось, полностью заглушил функциональность документа, так что время выполнения казалось совершенно не полностью функциональным. (Короче говоря, пока он, казалось, загружал все, "нагрузочный" шпиндель никогда не уходил.)

В последнем случае ничего больше не испортилось, но это было сломанное изображение. Как ни странно, в верхней части документа была лента "choropleth player", которая просто срабатывала, но ни одно из изображений не появилось.

Для моего собственного здравомыслия я также предоставил простые ссылки, которые отлично работали.

[This link](./animations/demographics.html) worked without a problem, except that it is not embedded, as I would prefer.

Таким образом, это явно проблема с вложением.

Ответ 1

Вот хак (возможно, неэлегантный)... Идея состоит в том, чтобы напрямую вставлять HTML программно в Rmd, а затем визуализировать Rmd.

файл 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

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>

подробный код для замены кода Rmd кодом HTML, а затем визуализация (возможно, может быть сокращена на много)

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 также работает с образцовыми файлами, которые я предоставил. Это потому, что ваш конкретный html не нравится кодирование UTF8?


EDIT: комментарии @MikeWilliamson в обратную связь

Я попробовал следующее

  • скопирован и вставлен animated_choropleth.html в пустой .Rmd
  • удалить ссылки на cloudfare.com, поскольку у меня были проблемы с доступом рендеринг (см. ниже)
  • вязать HTML
  • верните эти веб-ссылки в облаке.
  • поместите графики в ту же папку, что и рендер html
  • откройте HTML

Я, кажется, верну html, но не уверен, что результат - то, что вы ожидаете

Вы также сталкиваетесь с той же проблемой в pt 2? Вы можете отправить сообщение об ошибке и запросить исправления:). Это было мое сообщение об ошибке

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

Ответ 2

Попробовал ли параметр включить: в свой заголовок YAML?

https://rmarkdown.rstudio.com/html_document_format.html#includes

Но, возможно, у вас будет такая же проблема: я хотел бы включить HTML файл в конкретный раздел в свой документ RMarkdown, а не в заголовок или до/после тела.

Ответ 3

можно попробовать поставить эту строку в Rmarkdown, а затем вязать. (Заголовок YAML "output: html_document", если "время выполнения: блестящее" как-то не работает)