R降价为PDF - 打印控制台输出

时间:2018-04-08 15:42:10

标签: r pdf rstudio r-markdown

我在RStudio工作了一门课程,我想用R markdown写下我的报告。我想在pdf中显示某些控制台输出作为报告,特别是summary(model)的输出,其中model例如是lm。使用命令{{1}}获得的线性模型。然而,默认情况下,控制台输出在转换为带有knitr的pdf之后,按原样显示,并带有'#' - 前面的符号,这对我来说既丑陋也很麻烦,在调整时也很麻烦报告的最终布局。

有没有更好的方法来显示控制台输出,特别是在将我的笔​​记本转换为pdf时?理想情况下,我想像输出周围的框(HTML转换似乎只是给你),并且最佳地能够添加标题来说明输出代表什么。最重要的是,没有恼人的'#' - 每一行都有标志。

我曾尝试在这里搜索并使用Google搜索解决方案,但我找不到任何可以解决问题的方法。

3 个答案:

答案 0 :(得分:5)

这是一种解决方法。我们的想法是在文本中转换控制台输出,您可以根据需要绘制和自定义。

---
title: "Untitled"
output:
  pdf_document: default
---

```{r, echo = F}
print_output <- function(output, cex = 0.7) {
  tmp <- capture.output(output)
  plot.new()
  text(0, 1, paste(tmp, collapse='\n'), adj = c(0,1), family = 'mono', cex = cex)
  box()
}
```

```{r, warning = F}
lm <- lm(mpg ~ hp, data = mtcars)

print_output(summary(lm))
```

给出: enter image description here

答案 1 :(得分:3)

以下是使用knitr hooks的另一种方法。我们只是在块输出周围包装其他LaTeX命令。

<强> TOC:

  1. 使用乳胶包framed的基本解决方案。
  2. 使用乳胶包fancyvrb
  3. 的灵活解决方案

    1。使用乳胶包framed的基本解决方案。

    ---
    title: "Output Hook"
    output: pdf_document
    ---
    
    ```{r setup, include = F}
    library(knitr)
    opts_chunk$set(comment=NA)
    def_hook <- knit_hooks$get("output")
    knit_hooks$set(output = function(x, options) {
      out <- def_hook(x, options)
      return(paste("\\begin{framed}\\begin{verbatim}", x, "\\end{verbatim}\\end{framed}", collapse = "\n"))
    })
    ```
    
    ```{r}
    lm(mpg ~ hp, data = mtcars)
    ```
    

    enter image description here

    2。使用乳胶包fancyvrb

    的灵活解决方案

    您甚至可以使用latex包fancyvrb以非常灵活的方式修改结果(有关选项,请参阅this文档):

    ---
    title: "Output Hook"
    output: pdf_document
    header-includes:
      - \DefineVerbatimEnvironment{myVerb}{Verbatim}{numbers=left,numbersep=1mm,frame=lines,framerule=0.4mm,rulecolor=\color{blue}}
    ---
    
    ```{r setup, include = F}
    library(knitr)
    opts_chunk$set(comment=NA)
    def_hook <- knit_hooks$get("output")
    knit_hooks$set(output = function(x, options) {
      out <- def_hook(x, options)
      return(paste("\\begin{myVerb}\n", x, "\\end{myVerb}", collapse = "\n"))
    })
    ```
    
    ```{r}
    lm(mpg ~ hp, data = mtcars)
    ```
    

    enter image description here

答案 2 :(得分:2)

摆脱##是rmarkdown中的显示选项,对于整个文档的第一个代码块中的任何块或comment = ""都是opts_chunk$set(comment=NA

另外,你应该看看pander包的“好”打印输出。