2016-04-10 10 views
14

Быстрый Резюме

Как разместить HTML файлы вместо в файле Markdown R?Включить 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) 

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

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

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

--- 
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') 

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

Обновления

Два обновления. Совсем недавно я все еще не мог заставить работать, поэтому я подтолкнул все это к GitHub repository, если кто-то захочет помочь мне разобраться в проблеме. Более подробную информацию можно найти в файле Readme этого репо.

Кажется, что возможность вставлять HTML в файл R Markdown была бы невероятно полезной, поэтому я все время пытаюсь разобраться.


(Старые комментарии)

В соответствии с некоторыми из полезных предложений, я пытался и не следующее в файле R Markdown:

Блестящий метод:

```{r showChoro1} 
shiny::includeHTML("./animations/demographics.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. 

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

+0

@ chinsoon12 Да, я пробовал, но это не сработало. Возможно, я пробовал это неправильно, но я сделал что-то похожее здесь (http://www.html5rocks.com/en/tutorials/webcomponents/imports/) без успеха. –

+1

Сделайте это в куске кода. 'shiny :: includeHTML' может делать то, что вам нужно. – alistaire

ответ

8

Вот хак (возможно, неэлегантный) ... Идея состоит в том, чтобы напрямую вставлять 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") 

E DIT: htmltools :: includeHTML также работает с образцовыми файлами, которые я предоставил. Это потому, что ваш конкретный html не похож на кодировку UTF8?


EDIT: принимать @MikeWilliamson комментарии в обратной

Я попытался следующие

  1. скопировать и вставить animated_choropleth.html в пустой .Rmd
  2. удалить ссылки на cloudfare.com как я проблемы доступа при обработке (см. ниже)
  3. knit HTML
  4. положить обратно эти cloudfare Ссылок
  5. положить графики в той же папке, оказанной HTML
  6. открыть 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 
+0

Привет @ chinsoon12, это определенно кажется, что это ** должно ** работать, но мне все еще не повезло. Код на самом деле не секрет в любом случае, поэтому я все это переместил в репозиторий GitHub. Было бы здорово, если бы вы могли проверить ссылку на репозиторий, который я сделал выше. В противном случае, большое спасибо за вашу помощь! –

+0

Привет @ chinsoon12, спасибо за продолжение! Я знаю, что эта ошибка, из-за проблем с бутстрапом, является средством создания более гибких «форм» HTML (с учетом больших или меньших экранов). Я вижу, что вы правы, мне просто нужно настроить созданный HTML-файл choroplethr. Я не думал, что это проблема. Как только я это понял, я продолжу работу с людьми из библиотеки choroplethr. Еще раз спасибо! –

+0

Нет проблем! Было бы полезно каждому описать ошибку и исправить в edit :) – chinsoon12

-2

можно попробовать поставить эту линию в Rmarkdown, а затем вязать. (YAML заголовок «выход: html_document», если «время выполнения: блестящие» почему-то не работает)

+0

Извините, я думаю, вы не понимаете, что я хочу делать. Я не спрашиваю, как сделать HTML или Shiny *. Я спрашиваю, как ** разместить все HTML-файлы/страницы ** в документе R markdown. Я мог бы вырезать и вставить синтаксис HTML в файл, но это не очень изящно, * и * сам HTML-файл является предварительно сгенерированным, слишком большим искажением, подобно тому, как выглядит сгенерированный HTML из R Markdown. –

0

ли вы попробовать включает в себя: вариант в вашем заголовке YAML?

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

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

+0

Спасибо @thbtmntgn! Это достойное частичное решение, но, как вы сказали, мне нужен HTML ** встроенный/интегрированный ** в документ, а не только до или после тела. Так что это не работает (полностью) для моего дела. –

Смежные вопросы