使用KnitR以编程方式在R中创buildMarkdown表

我刚开始学习KnitR和使用Markdown生成R文档和报告。 这对于我日常工作中的很多日常报道来说是非常完美的。 然而,我没有看到的一件事是使用Markdown格式打印数据框架和表格的简单方法(有点像xtable ,但是使用Markdown而不是LaTeX或HTML)。 我知道我可以embedded从xtable的HTML输出,但我想知道是否有任何基于Markdown的解决scheme?

现在knitr (从版本1.3开始)包包括创build表的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| 

更新 :如果您在文档中获得原始降价尝试安装results = "asis"块选项。

两个将做到这一点的包是pander

 library(devtools) install_github('pander', 'Rapporter') 

或ascii

pander是一个稍微不同的方法来报告build设,(但可以是有用的这个function)。

ascii将允许您使用type = 'pandoc (或各种其他降价风格) print

 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将markdown转换为您所需的文档types,但是使用style='rmarkdown'将创build与此markdown软件包兼容的表以及rstudio内置的转换。

只是想用我所做的事来更新这个。 我正在使用hwriter包来打印表格,并使用row.*col.*function将CSS类放在不同的元素上。 然后,我写了自定义的CSS,使我的显示,因为我想它。 所以,这是一个例子,以防其他人处理类似的事情。

首先,创build一个文件来完成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") 

接下来,创build实际的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")))) ``` 

最后,只需创build一个自定义的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包中有一些function:

 > 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 ------------------------------------------- 

做自己定制的function不是很难。 这是一个非常简单的概念certificate,用于生成data.frame的rmarkdown表:

  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)。

在这里输入图像说明 从这里 – 读取其他人的代码 – 你可以弄清楚如何操作文本来生成你想要的表格,并创build更多的个性化function。

在markdown文档中使用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") 

为更多的select看看stargazer包而不是xtable

个人使用的例子

要在R中编写/创buildMarkdown表,还可以使用MarkdownReports的 MarkDown_Table_writer_DF_RowColNames()MarkDown_Table_writer_NamedVector()函数。 您只需传递包含维度名称的数据框架/matrix或带有名称的vector,然后使用Markdown格式parsing并写出表格。