TAR*_*man 101 markdown r knitr r-markdown
我刚刚开始了解KnitR以及使用Markdown生成R文档和报告.这看起来非常适合我日常报道我与工作有关的事情.但是,我没有看到的一件事是使用Markdown格式打印数据框和表的简单方法(有点像xtable
,但使用Markdown而不是LaTeX或HTML).我知道我可以从xtable中嵌入HTML输出,但我想知道是否有任何基于Markdown的解决方案?
Art*_*sov 119
现在knitr
(从1.3版开始)包中包含kable
了创建表的功能:
> library(knitr)
> kable(head(iris[,1:3]), format = "markdown")
| Sepal.Length| Sepal.Width| Petal.Length|
|-------------:|------------:|-------------:|
| 5,1| 3,5| 1,4|
| 4,9| 3,0| 1,4|
| 4,7| 3,2| 1,3|
| 4,6| 3,1| 1,5|
| 5,0| 3,6| 1,4|
| 5,4| 3,9| 1,7|
Run Code Online (Sandbox Code Playgroud)
更新:如果您在文档中获得原始markdown,请尝试setup results = "asis"
chunk选项.
mne*_*nel 31
两个将执行此操作的程序包是pander
library(devtools)
install_github('pander', 'Rapporter')
Run Code Online (Sandbox Code Playgroud)
或者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
--- ------------------ ----------------- ------------------
Run Code Online (Sandbox Code Playgroud)
请注意,在这两种情况下,它都指向使用pandoc
从markdown转换为所需的文档类型,但是使用style='rmarkdown'
将创建与此markdown
包兼容且内置转换的表rstudio
.
TAR*_*man 26
只是想用我所做的事情来更新这个.我现在正在使用该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")
Run Code Online (Sandbox Code Playgroud)
接下来,创建实际的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"))))
```
Run Code Online (Sandbox Code Playgroud)
最后,只需创建一个自定义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;
}
Run Code Online (Sandbox Code Playgroud)
执行./file_knit.r
给我file.html,看起来像这样:
所以,希望这可能对那些想要在Markdown输出中进行更多格式化的人有所帮助!
Mar*_*ius 18
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
-------------------------------------------
Run Code Online (Sandbox Code Playgroud)
Car*_*lli 12
制作自己的定制功能并不是很难.这是一个非常简单的概念证明,可以生成一个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)
}
Run Code Online (Sandbox Code Playgroud)
在.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))
```
Run Code Online (Sandbox Code Playgroud)
上面的代码会给你下面的图(在示例中这是pdf输出,但由于表是在markdwon,你也可以编织成html或word).
从这里开始 - 阅读其他人的代码 - 您可以弄清楚如何操作文本以生成所需的表格并创建更多个性化的功能.