2016-04-10 31 views
14

Riassunto Breve

Come faccio a piazzare i file HTML in atto all'interno di un file Markdown R?Includere file HTML nel file R Markdown?

dettagli

ho creato qualche bella mappa coropletica animate tramite choroplethr.

Come dimostra il legame, la funzione choropleths animato tramite la creazione di una serie di immagini PNG, che vengono poi arrotolate in un file HTML che cicli attraverso le immagini, per mostrare l'animazione. Funziona alla grande, sembra fantastico.

Ma ora voglio incorporare/incorporare queste pagine nel file .Rmd, in modo da avere un rapporto olistico che includa questi coropleti animati, insieme ad altri lavori.

Mi sembra ci dovrebbe essere un modo semplice per fare un equivalente

Links:

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

o

Immagini:

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

Il percorso immagini è precisamente quello che voglio: un riferimento che viene "fatto esplodere" per mettere le informazioni al loro posto, invece di ju st come collegamento. Come posso fare questo con un file HTML completo anziché solo un'immagine? C'è un modo?

Spiegazione via Esempio

Diciamo che il mio file HTML choropleth vive nel mio percorso locale a './animations/demographics.html', e ho un file di Markdown R come:

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

in cui ho assunto/finta che !! è l'antecedente che farà esattamente quello che voglio: permettimi di incorporare quel file HTML in linea con il resto del rapporto.

Aggiornamenti

Due aggiornamenti. Più di recente, non riuscivo ancora a far funzionare le cose, quindi ho spinto tutto fino a un GitHub repository, nel caso qualcuno fosse disposto ad aiutarmi a risolvere il problema. Ulteriori dettagli possono essere trovati nel file Leggimi di quel repository.

Sembra che essere in grado di incorporare HTML in un file R Markdown sarebbe incredibilmente utile, quindi continuo a cercare di risolverlo.


(commenti più vecchi)

Come da alcuni dei suggerimenti utili, ho provato e fallito il seguente nel file R Markdown:

metodo Shiny:

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

(Ho anche aggiunto runtime:Shiny nella parte YAML.)

htmltools metodo:

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

(In questo caso, ho fatto nessuna modifica alla YAML)

Nel primo caso (Shiny), non ha funzionato affatto.. In effetti, incluso l'HTML, sembrava che la funzionalità del documento fosse completamente ridotta, in modo tale che il runtime sembrava perennemente non completamente funzionante. (In breve, mentre sembrava caricare tutto, il "caricamento" spindel non andava mai via.)

In quest'ultimo caso, nient'altro si è incasinato, ma era un'immagine spezzata. Stranamente, nella parte superiore del documento c'era un nastro "coropleth player" che funzionava, è solo che nessuna delle immagini appariva.


Per la mia sanità mentale, ho anche fornito collegamenti semplici, che funzionavano bene.

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

Quindi è chiaramente una sfida con l'incorporamento.

+0

@ chinsoon12 Sì, ci ho provato ma non ha funzionato. È possibile che l'ho provato in modo errato, ma ho fatto qualcosa di simile a qui (http://www.html5rocks.com/en/tutorials/webcomponents/imports/) senza successo. –

+1

Fatelo in un chunk di codice. 'shiny :: includeHTML' può fare quello che ti serve. – alistaire

risposta

8

Ecco un trucco (probabilmente inelegante) ... l'idea è di inserire direttamente codice HTML in Rmd e quindi renderizzare Rmd.

lima temp.Rmd: file di

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

codice verbose per sostituire il codice Rmd con il codice HTML e poi il rendering (probabilmente può essere accorciato di molto)

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 funziona anche con i file di esempio che ho fornito. È perché il tuo html particolare non ama la codifica UTF8?


EDIT: prendendo @MikeWilliamson commenti in positivo

ho provato il seguente

  1. copiati e incollati in un animated_choropleth.html .RMD vuoto
  2. rimuovere i riferimenti al cloudfare.com come ho avuto problemi di accesso mentre il rendering (vedi sotto)
  3. maglia HTML
  4. .210
  5. rimesso quelle CloudFlare weblinks
  6. messo i grafici nella stessa cartella del rendering HTML
  7. aprire il codice HTML

mi sembra di tornare il codice HTML, ma non sono sicuro se il risultato è quello che si expect

Anche tu stai affrontando lo stesso problema in pt 2? Potresti voler postare il messaggio di errore e chiedere delle correzioni :).Questo era il mio messaggio di errore

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

Ciao @ chinsoon12, questo sicuramente sembra che ** dovrebbe ** funzionare, ma non ho ancora avuto fortuna. Il codice in realtà non è segreto in alcun modo, quindi ho spinto tutto in un repository GitHub. Sarebbe fantastico se potessi controllare il link al repository che ho realizzato sopra. Altrimenti, grazie mille per il tuo aiuto finora! –

+0

Ciao @ chinsoon12, grazie per il follow-up! So che l'errore è causato dai problemi con il bootstrap, un mezzo per rendere più flessibili le "forme" HTML (che consentono schermi più grandi o più piccoli). Vedo che hai ragione che ho semplicemente bisogno di regolare il file HTML choroplethr generato stesso. Non pensavo che quello fosse il problema. Una volta che l'ho capito bene, seguirò la gente della biblioteca di Choroplethr. Grazie ancora! –

+0

Nessun problema! Sarebbe utile a tutti descrivere l'errore e correggerlo in una modifica :) – chinsoon12

-2

può provare a mettere questa riga in Rmarkdown e quindi lavorare a maglia. (YAML intestazione "uscita: html_document", se "runtime: lucido" in qualche modo non funziona)

+0

Scusa, penso che tu stia fraintendendo quello che voglio fare. Non sto chiedendo come rendere HTML o Shiny *. Ti sto chiedendo come ** inserire interi file HTML/pagine ** all'interno del documento di markdown R. Potrei tagliare e incollare la sintassi HTML nel file, ma ciò non è molto elegante, * e * il file HTML stesso è un garble pre-generato, eccessivamente grande, proprio come appare HTML generato da R Markdown. –

0

Hai provato la include: opzione nell'intestazione YAML?

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

Ma forse avrete lo stesso problema che ho: mi piacerebbe includere il file HTML in una sezione specifica nel mio documento RMarkdown, non nell'intestazione o prima/dopo il corpo.

+0

Grazie a @thbtmntgn! Questa è una soluzione parziale decente, ma come hai detto, volevo l'HTML ** incorporato/integrato ** nel documento, non solo prima o dopo il corpo. Quindi non funziona (completamente) per il mio caso. –

Problemi correlati