はじめに
Rで分析・集計したdata.frameをknitr::kableでmarkdownに出力して、Confluence WikiにがんがんMarkdownテーブル貼りたい!…にもかかわらず、Markdownテーブルはなぜかマークアップ挿入でも出力されないorz
[Using markdown tables](https://community.atlassian.com/t5/Confluence-questions/Using-markdown-tables/qaq-p/578215
2018/03/30) のAtlassianのコミュニティでも同じ問題は上がっていますが、他のタスクもあって取りかかれていない様子(2019/1/22時点)。また、MySQLでDUMPしたテーブル定義をConfluence Wiki記法やMarkdown記法にするワンライナーでも同様に、sed等で出力結果を整形することを行っています。
今回は、Rではおなじみのknitr::kableを使って、無理やりにでもConfluence Wiki記法の表に変換することを行います
やってみる
準備として、mtcarsのデータを適当に用意する
> dt <- mtcars[1:5, 1:6]
> dt
mpg cyl disp hp drat wt
Mazda RX4 21.0 6 160 110 3.90 2.620
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875
Datsun 710 22.8 4 108 93 3.85 2.320
Hornet 4 Drive 21.4 6 258 110 3.08 3.215
Hornet Sportabout 18.7 8 360 175 3.15 3.440
これをknitr::kable
で出力すると、
> knitr::kable(dt)
| | mpg| cyl| disp| hp| drat| wt|
|:-----------------|----:|---:|----:|---:|----:|-----:|
|Mazda RX4 | 21.0| 6| 160| 110| 3.90| 2.620|
|Mazda RX4 Wag | 21.0| 6| 160| 110| 3.90| 2.875|
|Datsun 710 | 22.8| 4| 108| 93| 3.85| 2.320|
|Hornet 4 Drive | 21.4| 6| 258| 110| 3.08| 3.215|
|Hornet Sportabout | 18.7| 8| 360| 175| 3.15| 3.440|
knitr::kable
の型やattributesをみてみる
> kb <- knitr::kable(dt)
> str(kb)
'knitr_kable' chr [1:7] "| | mpg| cyl| disp| hp| drat| wt|" ...
- attr(*, "format")= chr "markdown"
> attributes(kb)
$format
[1] "markdown"
$class
[1] "knitr_kable"
これで事前調査は完了。続いて、変換する関数をつくる
tableToConfluence <- function(kb){
kb[1] <- gsub("\\|","||", kb[1])
kb <- kb[c(-2)]
attr(kb, "format") <- "markdown"
attr(kb, "class") <- "knitr_kable"
return(kb)
}
この関数をはさむと、シンプルなConfluence Wiki記法に変換されます
> tableToConfluence(knitr::kable(dt))
|| || mpg|| cyl|| disp|| hp|| drat|| wt||
|Mazda RX4 | 21.0| 6| 160| 110| 3.90| 2.620|
|Mazda RX4 Wag | 21.0| 6| 160| 110| 3.90| 2.875|
|Datsun 710 | 22.8| 4| 108| 93| 3.85| 2.320|
|Hornet 4 Drive | 21.4| 6| 258| 110| 3.08| 3.215|
|Hornet Sportabout | 18.7| 8| 360| 175| 3.15| 3.440|
何をやってるかというと、gsubで先頭の見出し行を整形、2行目を削除、あとはattr
でattribute情報をあとから追加してるだけです。
Confluenceのマークアップ挿入から、ペーストして無事にできました!
おわりに
Markdown Tableをペーストできる公式機能が待ち遠しいですね