2016-09-07 12 views
3

私はRMarkdownでレポートテンプレートを生成しようとしています。このレポートでは、私が使用している調査の質問の番号とテキストの横にセルのプロットがあります。いくつかの例プロットを生成し、MS Wordで以下の例を作成しました。 RMarkdownのテーブルにRで生成されたプロットを入れることは可能ですか?それがある場合RMarkdownテーブルにプロットを埋め込むにはどうしたらいいですか?

は、コードは次のように何を求めますか?

Desired output

編集(9/8/16):それが今立っているよう私は.Rmdファイルを含めています。問題は、htmlファイルが次のメッセージでコンパイルに失敗することです。

pandoc: Could not fetch Template1_files/figure-html/score_table-1.png 
Template1_files/figure-html/score_table-1.png: openBinaryFile: does not exist (No such file or directory) 
Error: pandoc document conversion failed with error 67 
Execution halted 

テンプレート1はscore_tableがチャンクラベルです。

誰かが私には、問題の診断に役立つことをいとわないだろうか?

<meta charset="utf-8"> 
--- 
title: "Untitled" 
author: "Xander" 
date: "September 7, 2016" 
output: html_document 
    self_contained: false 
--- 

```{r mychunk, fig.show = "hide", echo = FALSE, fig.height=3, fig.width=5} 
library(knitr) 
library(ggplot2) 

# sample data 
dat <- data.frame(text = sapply(1:10, FUN = function(x) { paste0(sample(x = LETTERS, size = 15), collapse = "") })) 
score_set = replicate(n = 10, expr = {data.frame(other = c("other", "other", "other", "other"), score=sample(1:7,4,TRUE))},simplify = F) 

#Plot Function 
plotgen<-function(score_set,other,score){ 
    p <- ggplot(score_set, aes(factor(other), score)) 
    p + geom_violin(fill = "#99CCFF") + coord_flip() + scale_x_discrete(name=NULL) + 
    scale_y_continuous(breaks = round(seq(1, 7, by = 1),1), limits = c(1,7), name=NULL) + theme(axis.text.y=element_blank(),axis.title.y=element_blank(),axis.ticks.y=element_blank(), 
     panel.grid.major.y = element_line(colour = "black"), 
     panel.grid.minor = element_blank(), 
     panel.background = element_rect(fill = "white"), 
     panel.border = element_rect(colour = "black", fill=NA, size=1)) + 
geom_hline(yintercept=sample(1:7,1,TRUE), size = 1.5, colour = "#334466") 
} 

# generate plots 
invisible(lapply(seq_along(score_set), FUN = function(x) {plotgen(score_set[[x]],other,score)})) 

out <- cbind(row.names(dat), 
     as.character(dat$text), 
     sprintf("![](%s%s-%s.png)", opts_current$get("fig.path"), opts_current$get("label"), 1:nrow(dat))) 
kable(out, col.names = c("ID", "Text", "")) 
```` 

答えて

3

次の(ggplot2プロットについて、基本プロットのためないを - 一番下のコメントを参照)行うことができます:

```{r mychunk, fig.show = "hide", echo = FALSE, fig.height=3, fig.width=5} 
library(knitr) 
# sample data 
dat <- data.frame(
    text = sapply(1:10, FUN = function(x) { paste0(sample(x = LETTERS, size = 15), collapse = "") }), 
    x1 = rnorm(10), 
    x2 = rnorm(10, mean = 3), 
    x3 = rnorm(10, mean = 5)) 

# generate plots 
invisible(apply(dat[, 2:4], MARGIN = 1, FUN = boxplot)) 

out <- cbind(row.names(dat), 
      as.character(dat$text), 
      sprintf("![](%s%s-%s.png)", opts_current$get("fig.path"), opts_current$get("label"), 1:nrow(dat))) 
kable(out, col.names = c("ID", "Text", "Boxplot")) 
``` 
  • apply(dat[, 2:4], MARGIN = 1, FUN = boxplot)は、x1からのデータを使用して箱ひげ図を生成し、 x2および。数字はfig.show="hide"のために生成されますが、文書には含まれません。
  • sprintf("![](%s%s-%s.png)", opts_current$get("fig.path"), opts_current$get("label"), 1:nrow(dat))は、プロットを含むマークダウン構文を生成します。これはcalling include_graphicsに似ていますが、マークダウンを文字ベクトルとして得るという利点があります。
  • 最後に、kableがテーブルを生成します。

また、あなたが使用して、手動でテーブルを作り出すことができるPandocのいくつかのより多くの柔軟性を与えpipe_tableas shown here。上記コードの

出力:

Figure in table

Gregor's answer hereggplot2プロットにこれを適用する方法を示しています。すなわちinvisible(apply(...))invisible(lapply(apply(...), print))なり、素子によってapply要素によって返さlistを印刷します。

+0

この非常に役立つ応答をありがとう。これは非常に有望に見えます。 RMarkdownで表示されていないイメージへのパスがどのように生成されるのかを明確にする質問がありました。 ggplot2でグラフを生成する関数でboxplot関数を置き換えた後、次のエラーが発生しました: 'pandoc:Template1_files/figure-html/mychunk-1.pngをフェッチできませんでした 'ggplot2プロットのパスは基本パッケージプロット? 'sprintf()'を使うときに別の方法で指定する必要はありますか?再度、あなたの助けに感謝します。 – Xander

+1

いいえ、ggplotは関係ありません。しかし、['self_contained:false'](http://rmarkdown.rstudio.com/html_document_format.html#document_dependencies)を設定し、コンパイル後にファイルパスを確認することができます。もちろん、 'mychunk'をプロットが生成されたチャンクのラベルに置き換える必要があります。 –

+0

ありがとうございます。前にファイルパスをチェックしようとしましたが、 'self_contained:false'でこれをしませんでした。残念ながら、 'file.exists(paste(getwd()、"/Template1_files/figure-html/score_table-1.png "、sep =" "))'はまだコンパイル後にfalseを返します。 (チャンクのラベルは 'score_table'です。) 'invisible()'を付けずにテーブルを生成したときにテーブルが表示されることを再確認しました。問題の診断に役立つ別の推奨事項がありますか? – Xander

関連する問題