我在RStudio工作了一门课程,我想用R markdown写下我的报告。我想在pdf中显示某些控制台输出作为报告,特别是summary(model)
的输出,其中model
例如是lm
。使用命令{{1}}获得的线性模型。然而,默认情况下,控制台输出在转换为带有knitr的pdf之后,按原样显示,并带有'#' - 前面的符号,这对我来说既丑陋也很麻烦,在调整时也很麻烦报告的最终布局。
有没有更好的方法来显示控制台输出,特别是在将我的笔记本转换为pdf时?理想情况下,我想像输出周围的框(HTML转换似乎只是给你),并且最佳地能够添加标题来说明输出代表什么。最重要的是,没有恼人的'#' - 每一行都有标志。
我曾尝试在这里搜索并使用Google搜索解决方案,但我找不到任何可以解决问题的方法。
答案 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))
```
答案 1 :(得分:3)
以下是使用knitr hooks的另一种方法。我们只是在块输出周围包装其他LaTeX命令。
<强> TOC:强>
framed
的基本解决方案。fancyvrb
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)
```
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)
```
答案 2 :(得分:2)
摆脱##是rmarkdown中的显示选项,对于整个文档的第一个代码块中的任何块或comment = ""
都是opts_chunk$set(comment=NA
。
另外,你应该看看pander包的“好”打印输出。