web-dev-qa-db-ja.com

R MarkdownファイルにHTMLファイルを含めますか?

簡単な要約

R Markdownファイル内のHTMLファイルを所定の場所に配置するにはどうすればよいですか?

詳細

choroplethr でニースのアニメーションコロプレスマップを作成しました。

リンクが示すように、アニメーション化されたコロプレスは、一連のPNG画像を作成することにより機能します。PNG画像は、画像を循環するHTMLファイルにロールされ、アニメーションを表示します。素晴らしく機能し、素晴らしく見える。

しかし、私はこれらのページを.Rmdファイル内に埋め込み/組み込みたいので、これらのアニメーション化されたコロプレスやその他の作業を含む全体的なレポートを作成します。

私には、同等のものを行う簡単な方法があるはずです

リンク:

[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ファイルでこれを行うにはどうすればよいですか?方法はありますか?

例による説明

私のコロプレス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's review those earlier demographic maps we'd seen.

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

ここで、!!は私が望むことを正確に行う前件であると想定/ふりをしました。レポートの残りの部分にHTMLファイルを埋め込むことができます。

更新

2つの更新。ごく最近、私はまだ物事を機能させることができなかったので、問題を解決するのを手伝ってくれる人がいる場合に備えて、すべてを GitHubリポジトリ に押し上げました。詳細については、そのリポジトリのReadmeファイルを参照してください。

HTMLをR Markdownファイルに埋め込むことができると信じられないほど便利だと思われるので、それを整理しようとし続けています。


(古いコメント)

いくつかの有用な提案に従って、R Markdownファイルで次のことを試みて失敗しました。

光沢のある方法:

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

(YAML部分にruntime:Shinyを追加しました。)

htmltoolsメソッド:

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

(この場合、YAMLに変更を加えませんでした。)

前者の場合(Shiny)、まったく機能しませんでした。実際、HTMLを含めると、ドキュメントの機能が完全に無効になり、ランタイムが完全に機能しないように見えました。 (要するに、すべてをロードするように見えたが、「ロード」スピンデルは決して消えなかった。)

後者の場合、他の何も台無しにされませんでしたが、それは壊れたイメージでした。奇妙なことに、ドキュメントの上部に「コロプレスプレーヤー」リボンがありましたが、これは機能しますが、画像がポップアップしないということです。


私自身の正気のために、私も簡単にリンクを提供しましたが、それはうまくいきました。

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

したがって、それは明らかに埋め込みに関する課題です。

19
Mike Williamson

ハック(おそらくエレガントではない)です...アイデアは、プログラムで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")

編集:htmltools :: includeHTMLは、私が提供したサンプルファイルでも動作します。あなたの特定のhtmlがUTF8エンコードを好まないからでしょうか?


編集:@MikeWilliamsonコメントをフィードバックに取り込む

私は次を試しました

  1. コピーして貼り付け animated_choropleth.html に空白の.Rmd
  2. レンダリング中にアクセスの問題が発生したため、cloudfare.comへの参照を削除します(以下を参照)
  3. ニットHTML
  4. それらのクラウドフェアのウェブリンクを元に戻す
  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
11
chinsoon12

YAMLヘッダーでincludes:オプションを試しましたか?

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

しかし、あなたは私と同じ問題を抱えているかもしれません:HTMLファイルをヘッダーまたは本文の前後ではなく、RMarkdownドキュメントの特定のセクションに含めたいと思います。

2
thbtmntgn