0

formattableR で見栄えの良いデータ フレームにパッケージを使用しています。データが次のようになっているとします。

df<-data.frame(Typ=c("Winners","","Losers",""),
               Time=c("1.","2.","1.","2."),
               Value=percent(c(0.22,0.18,0.78,0.82)),
               Change=percent(c(NA,-0.04,NA,0.04)))
formattable(df, list(
  Change=formatter(
    "span",
    style = x ~ style(color = ifelse(x < 0 , "red", "green")),
    x ~ icontext(ifelse(x < 0, "arrow-down", "arrow-up"), x)))
)

このようにして、すべてが (RStudio プレビューおよび HTML ドキュメントで) 適切に機能しますが、このテーブルを R Sweave ドキュメントに配置しようとすると、レンダリングされません。

format_tableどの出力がknit_kableオブジェクトであるかを使用しようとしましknit_printたが、どちらも機能しませんでした。

4

1 に答える 1

2

大まかに言えば、問題は次のとおりです: RNW ドキュメントで (または一般的には、マークダウン/HTML 出力を生成する関数)を使用する方法は?formattable

バックグラウンド

最初は、この回答で提案したアプローチを適用できると思いました。RNW ドキュメントにマークダウン マークアップを埋め込むことができます。しかし、結果としてformattable、マークダウンと HTML の出力が混在して生成されます。この場合、そのアプローチは機能しません。

約 3 週間前、 fdetsch は RNW ドキュメントに埋め込む方法(または一般的には s)を示す素晴らしい回答を投稿しました。この回答は、fdetchのソリューションに基づいて構築および拡張されています。leaflethtmlWidget

ソリューション(生)

  • GitHub からライブラリをインストールし、webshot必要に応じdevtoolshtmlwidgets.

    devtools::install_github("wch/webshot")
    
  • の戻り値をformattableオブジェクトに保存します (私は を使用しましたmytable)。
  • mytableに変換htmlWidget:as.htmlwidget(mytable)
  • ウィジェットを一時 HTML ファイルに保存します (現在の作業ディレクトリにある必要があります。以下を参照してください)。

    tmpHTML <-  basename(tempfile(fileext = ".html"))
    saveWidget(as.htmlwidget(mytable), file = tmpHTML)
    
  • HTML ファイルの「スクリーンショット」を撮ります。ファイル名の代わりにパスを渡すと、何らかの理由でwebshot空の画像ファイルが生成されます。

    myImage <- "image.pdf"
    webshot(tmpHTML, file = myImage, cliprect = "viewport")
    
  • 図をドキュメントに追加します。

    knitr::include_graphics(myImage)
    

問題と改善

  • 問題 1: ウィジェットに対して画像が大きすぎます。これはtoselector = "#htmlwidget_container"の代わりに渡すことで解決できるはずですが、私のテストではうまくいきませんでした。または、のクロッピング メカニズムを使用するために直後に追加することもできます。cliprect = "viewport"webshotplot_crop(myImage, quiet = TRUE)webshotknitr
  • 問題 2: 何らかの理由で、生成された PDF が白黒です。スクリーンショットを PNG として保存すると、色が保持されます: myImage <- "image.png". ただし、フォントがぼやけてしまい、解像度を上げる方法が見つかりませんでした (webshot議論vwidthは役に立ちません)。したがって、これはトレードオフだと思います。ぼやけていないフォント (PDF) または色 (PNG) のいずれかを使用できます。
  • 問題 3: 乱雑な一時ファイル。必要に応じて追加unlink(tmpHTML)できます。

完全な例

\documentclass{article}
\begin{document}
<<>>=
library(htmlwidgets)
library(webshot)
library(formattable)

# Data from the question
df <- data.frame(
  Typ = c("Winners", "", "Losers", ""),
  Time = c("1.", "2.", "1.", "2."),
  Value = percent(c(0.22, 0.18, 0.78, 0.82)),
  Change = percent(c(NA, -0.04, NA, 0.04))
  )
mytable <- formattable(df, list(Change = formatter(
  "span",
  style = x ~ style(color = ifelse(x < 0 , "red", "green")),
  x ~ icontext(ifelse(x < 0, "arrow-down", "arrow-up"), x)
  )))

tmpHTML <-  basename(tempfile(fileext = ".html"))
saveWidget(as.htmlwidget(mytable), file = tmpHTML)

myImage <- "image.pdf"
webshot(tmpHTML, file = myImage, cliprect = "viewport")

plot_crop(myImage, quiet = TRUE)
knitr::include_graphics(myImage)

unlink(tmpHTML)
@
\end{document}
于 2016-03-16T16:26:53.340 に答える