Включить HTML файлы в файл R Markdown?
Краткая сводка
Как разместить HTML файлы на месте в файле R Markdown?
Подробнее
Я создал несколько приятных анимированных choropleth-карт через choroplethr.
Как показывает ссылка, анимированные choropleths функционируют путем создания набора PNG-изображений, которые затем перекатываются в HTML файл, который циклически проходит через изображения, чтобы показать анимацию. Отлично работает, отлично выглядит.
Но теперь я хочу вставлять/включать эти страницы в файл .Rmd, так что у меня есть целостный отчет, включающий эти анимированные choropleths, а также другие работы.
Мне кажется, должен быть простой способ сделать эквивалент
Ссылки:
[please click here](http://this.is.where.you.will.go.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.
!
где я предположил/сделал вид, что !!
является антецедентом, который будет делать именно то, что я хочу: позвольте мне встроить этот 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", если "время выполнения: блестящее" как-то не работает)