KnitRと、Rドキュメントとレポートの生成におけるMarkdownの使用について学び始めたところです。これは、私が自分の仕事に関係しているという日々の報告の多くに最適のようです。ただし、私が見ていないことの1つは、Markdownフォーマットを使用してデータフレームとテーブルを印刷する簡単な方法です(のようなものですxtable
が、LaTeXやHTMLの代わりにMarkdownを使用します)。xtableからのHTML出力を埋め込むことができることは知っていますが、Markdownベースのソリューションがあるかどうか疑問に思っていました。
8 に答える
これを行う2つのパッケージはパンダーです
library(devtools)
install_github('pander', 'Rapporter')
またはASCII
pander
は、レポートの作成に対するわずかに異なるアプローチです(ただし、この機能には役立つ場合があります)。
ascii
(または他のさまざまなマークダウンフレーバー)print
を使用できるようになりますtype = 'pandoc
library(ascii)
print(ascii(head(iris[,1:3])), type = 'pandoc')
**Sepal.Length** **Sepal.Width** **Petal.Length**
--- ------------------ ----------------- ------------------
1 5.10 3.50 1.40
2 4.90 3.00 1.40
3 4.70 3.20 1.30
4 4.60 3.10 1.50
5 5.00 3.60 1.40
6 5.40 3.90 1.70
--- ------------------ ----------------- ------------------
どちらの場合も、を使用pandoc
してマークダウンから目的のドキュメントタイプに変換するように指示されていますが、を使用すると、このパッケージとstyle='rmarkdown'
互換性のあるテーブルが作成され、で変換が組み込まれます。markdown
rstudio
私がやろうと決心したことでこれを更新したかっただけです。現在、hwriter
パッケージを使用してテーブルを印刷し、row.*
およびcol.*
機能を使用して CSS クラスをさまざまな要素に配置しています。次に、カスタム CSS を作成して、自分のディスプレイを思いどおりに作成しました。したがって、他の誰かが同様のことを扱っている場合の例を次に示します。
まず、knitting
Markdown を HTML に変更するファイルを作成します。
FILE: file_knit.r
#!/usr/bin/env Rscript
library(knitr)
library(markdown)
knit("file.Rmd")
markdownToHTML("file.md","file.html",stylesheet="~/custom.css")
次に、実際の Markdown ファイルを作成します。
FILE: file.Rmd
Report of Fruit vs. Animal Choices
==================================
This is a report of fruit vs. animal choices.
```{r echo=FALSE,results='asis'}
library(hwriter)
set.seed(9850104)
my.df <- data.frame(Var1=sample(x=c("Apple","Orange","Banana"),size=40,replace=TRUE),
Var2=sample(x=c("Dog","Cat","Bunny"),size=40,replace=TRUE))
tbl1 <- table(my.df$Var1,my.df$Var2)
tbl1 <- cbind(tbl1,rowSums(tbl1))
tbl1 <- rbind(tbl1,colSums(tbl1))
colnames(tbl1)[4] <- "TOTAL"
rownames(tbl1)[4] <- "TOTAL"
# Because I used results='asis' for this chunk, I can just use cat() and hwrite() to
# write out the table in HTML. Using hwrite()'s row.* function, I can assign classes
# to the various table elements.
cat(hwrite(tbl1,
border=NA,
table.class="t1",
row.class=list(c("header col_first","header col","header col","header col", "header col_last"),
c("col_first","col","col","col","col_last"),
c("col_first","col","col","col","col_last"),
c("col_first","col","col","col","col_last"),
c("footer col_first","footer col","footer col","footer col","footer col_last"))))
```
最後に、カスタム CSS ファイルを作成するだけです。
FILE: custom.css
body {
font-family: sans-serif;
background-color: white;
font-size: 12px;
margin: 20px;
}
h1 {font-size:1.5em;}
table {
border: solid;
border-color: black;
border-width: 2px;
border-collapse: collapse;
margin-bottom: 20px;
text-align: center;
padding: 0px;
}
.t1 .header {
color: white;
background-color: black;
border-bottom: solid;
border-color: black;
border-width: 2px;
font-weight: bold;
}
.t1 .footer {
border-top: solid;
border-color: black;
border-width: 2px;
}
.t1 .col_first {
border-right: solid;
border-color: black;
border-width: 2px;
text-align: left;
font-weight: bold;
width: 75px;
}
.t1 .col {
width: 50px;
}
.t1 .col_last {
width: 50px;
border-left: solid;
border-color: black;
border-width: 2px;
}
実行./file_knit.r
すると、次のような file.html が得られます。
ですから、これが Markdown 出力でもう少し書式設定をしたい他の人に役立つことを願っています!
pander
パッケージには次の関数が含まれています。
> library(pander)
> pandoc.table(head(iris)[, 1:3])
-------------------------------------------
Sepal.Length Sepal.Width Petal.Length
-------------- ------------- --------------
5.1 3.5 1.4
4.9 3 1.4
4.7 3.2 1.3
4.6 3.1 1.5
5 3.6 1.4
5.4 3.9 1.7
-------------------------------------------
独自のカスタマイズされた関数を作成することはそれほど難しくありません。の rmarkdown テーブルを生成するための非常に単純な概念実証を次に示しますdata.frame
。
rmarkdownTable <- function(df){
cat(paste(names(df), collapse = "|"))
cat("\n")
cat(paste(rep("-", ncol(df)), collapse = "|"))
cat("\n")
for(i in 1:nrow(df)){
cat(paste(df[i,], collapse = "|"))
cat("\n")
}
invisible(NULL)
}
.Rmd ドキュメントでは、関数を次のように使用しますresults = 'asis'
。
```{r, results = 'asis'}
rmarkdownTable <- function(df){
cat(paste(names(df), collapse = "|"))
cat("\n")
cat(paste(rep("-", ncol(df)), collapse = "|"))
cat("\n")
for(i in 1:nrow(df)){
cat(paste(df[i,], collapse = "|"))
cat("\n")
}
invisible(NULL)
}
rmarkdownTable(head(iris))
```
上記のコードは、次の図を示します (例では、これは pdf 出力ですが、表は markdwon にあるため、html または word に編むこともできます)。
ここから、そして他の人のコードを読むことで、テキストを操作して必要なテーブルを生成し、よりパーソナライズされた関数を作成する方法を理解できます。
マークダウン ドキュメントでは、knitr::kable と xtable を組み合わせて使用します。
library("knitr","xtable")
単純な data.frame の場合 -
kable(head(mtcars[,1:4]),format="markdown")
kable(head(mtcars[,1:4]),format="pandoc",caption="Title of the table")
format="pandoc"
キャプションのようなより多くのオプションを許可します。
さて、モデルまとめの組み合わせ。
data(tli)
fm1 <- aov(tlimth ~ sex + ethnicty + grade + disadvg, data=tli)
kable(xtable(fm1), caption = "Annova table")
さらに多くのオプションについては、stargazer
の代わりにパッケージを見てくださいxtable
。