2013-11-15 19 views
26

RMarkdownのテーブルを手動で簡単にフォーマットできます(knitrとmarkdownパッケージを使用してHTMLに変換したときによく見える)、PDF(pandocとmiktex )とdocx(pandocを使って)?HTML、PDF、DOCXでよく見える簡単なRMarkdownテーブル

私が最も頻繁に使用する3つのフォーマットでよく見えるR関数の結果ではない小さなテーブルをRMarkdownに書きたいと思っています。これまでのところ、3つのフォーマットのうち2つでよく見えるフォーマットを見つけました.3/3が可能ですか?

1。これはニットHTMLの後に良く見えますが、PDFやdocxでは良くありません

<table> 
<tr> 
<td>Eggs</td> 
<td>Ham</td> 
</tr> 
<tr> 
<td>Basil</td> 
<td>Tomato</td> 
</tr> 
</table> 

2つです。これはニットHTMLの後によく見えますが、PDFやdocxではうまくいかない

| Tables  | Are   | Cool | 
| ------------- |:-------------:| -----:| 
| col 3 is  | right-aligned | $1600 | 
| col 2 is  | centered  | $12 | 
| zebra stripes | are neat  | $1 | 

3つです。これはニットHTMLの後に良く見えませんが、PDFとdocx(これまでの最良のオプション)でうまくいきます。

V1   Tweedledee  Tweedledum 
-------- -------------- ---------------- 
Age  14    14 
Height  3'2"    3'2" 
Politics Conservative  Conservative 
Religion "New Age"  Syrian Orthodox 
--------- -------------- ---------------- 

4人です。これは、ニットHTMLの後によく見えるとPDFとdocx(勝者!)を作るが、私は後のマニュアルの書式設定ではありません。

```{r table1, echo=FALSE, message=FALSE, warnings=FALSE, results='asis'} 
require(pander) 
panderOptions('table.split.table', Inf) 
set.caption("Data on cars") 
pander(mtcars, style = 'rmarkdown') 
``` 

これは私がPDFとのdocxファイルを作ってるんだかです:

daroczigのコメント、 panderはpandocのパイプ構文に変換することが特に手がかりに触発さ
filen <- "table" # name of my RMarkdown file without suffix 
knit(paste0(filen,".Rmd")) 

# make PDF 
system(paste0("pandoc -s ", paste0(filen,".md"), " -t latex -o ", paste0(filen,".pdf"), " --highlight-style=tango -S")) 

# make docx 
system(paste0("pandoc -s ", paste0(filen,".md"), " -o ", paste0(filen,".docx"), " --highlight-style=tango -S")) 
+2

「パンダ」ソリューションの問題点は何ですか?つまり、RオブジェクトをPandoc'x [パイプ構文](http://johnmacfarlane.net/pandoc/README.html#pipe-tables)に変換する関数だけで、同じテーブル構文を再現することができます。 – daroczig

+1

@daroczig 'pander'はRオブジェクトから優れたテーブルを生成しますが、私はRオブジェクトなしで優れたテーブルを得ることができるかどうかを見ています。たとえば、非常に単純なテキスト表。私は道を見ることができないので、私の単純なテーブルのデータフレームを作ってから、 'pander'を使うのが最善の選択肢です。 – Ben

+1

私はあなたのコメントのために@Benを、ありがとう、参照してください。もちろん、このようなテーブルを手作業で作成することもできます(「パンダなし」ではなく)。構文については、上記のリンク先のマニュアルを読んでください。あるいは単に 'pander(mtcars、style = 'rmarkdown')'を実行し、あなたの解決策と比較して違いを確認してください。 – daroczig

答えて

21

、私は詳しく見てましたpanderとなり、catの参照が見つかりました。いくつかの実験の後、私は勝者が見つかりました:

```{r table2, echo=FALSE, message=FALSE, warnings=FALSE, results='asis'} 
tabl <- " # simple table creation here 
| Tables  | Are   | Cool | 
|---------------|:-------------:|------:| 
| col 3 is  | right-aligned | $1600 | 
| col 2 is  | centered  | $12 | 
| zebra stripes | are neat  | $1 | 
" 
cat(tabl) # output the table in a format good for HTML/PDF/docx conversion 
``` 

これは私のテストではHTML、PDFおよびDOCX中に均一に格好良いテーブルを生成します。今私は解決策に私を得るために彼に感謝するためにいくつかの他の質問にdaroczig upvoteをオフになっています。

テーブルのキャプションが必要な場合は、を別にする必要があります。キャプションは、HTMLではなく、PDFにのみ表示されます。

```{r table-simple, echo=FALSE, message=FALSE, warnings=FALSE, results='asis'} 
require(pander) 
panderOptions('table.split.table', Inf) 
set.caption("My great data") 
my.data <- " # replace the text below with your table data 
    Tables  | Are   | Cool 
    col 3 is  | right-aligned | $1600 
    col 2 is  | centered  | $12 
    zebra stripes | are neat  | $1" 
df <- read.delim(textConnection(my.data),header=FALSE,sep="|",strip.white=TRUE,stringsAsFactors=FALSE) 
names(df) <- unname(as.list(df[1,])) # put headers on 
df <- df[-1,] # remove first row 
row.names(df)<-NULL 
pander(df, style = 'rmarkdown') 
``` 
+6

あなたのコメント(#ここでの簡単なテーブルの作成)がpandocを妨害することが判明しました。私のマシン上でレンダリングするには、テーブルの前の行が空でなければなりません。 – Wesley

+0

パッケージ 'knitr'と' bookdown'の著者は、R markdownのマルチフォーマット出力のための最も適切な解決策として 'knitr :: kable'を提案しています。特に、内部参照+リンク用のキャプションと自動ラベル付きのテーブルが必要な場合。 [ここ](https://bookdown.org/yihui/bookdown/tables.html)をご覧ください。 – FairMiles

関連する問題