在 R Markdown / knitr 报告中使用 message() 切碎输出
Chopped up output using message() in an R Markdown / knitr report
我最近向 rOpenSci 提交了一个包,他们更喜欢使用 message()
而不是 cat()
作为用户端控制台输出。当我为我的包进行切换时,我注意到渲染的小插图格式发生了令人不安的变化。我在以下 R Markdown 报告中重现了该问题。
---
title: "MWE"
author: "Will Landau"
date: "11/20/2017"
output: html_document
---
```{r testcat}
for(x in LETTERS[1:3]){
cat(x, "\n")
}
```
```{r testmessage}
for(x in LETTERS[1:3]){
message(x)
}
```
```{r testmessage2}
for(x in LETTERS[1:3]){
message(x, "\n", appendLF = FALSE)
}
```
对于第一个代码块,我得到了所需的输出:所有三行都串在一个灰色框中。
## A
## B
## C
但是对于第二和第三块,每一行都有自己单独的灰色框。
## A
.
## B
.
## C
如何继续使用 message()
而不会像这样切断 knitr
输出?
您可以尝试构建字符串并将消息函数放在循环之外,如下所示:
```{r testmessage}
single_message <- c()
for(x in LETTERS[1:3]){
single_message <- paste(single_message , x, sep = "\n")
}
message(single_message )
```
请注意,此示例确实在开头添加了换行符,您可以使用额外的 if
来防止这种情况,或者使用循环外的第一个元素来初始化 single_message
.
我想我已经解决了:knitr
有一个 collapse
块选项。我所需要的只是将这个块放在任何其他块之前。
```{r setup}
knitr::opts_chunk$set(collapse = TRUE)
```
输出比我预期的更简洁,但经过一些修饰后,格式现在看起来好多了。
我最近向 rOpenSci 提交了一个包,他们更喜欢使用 message()
而不是 cat()
作为用户端控制台输出。当我为我的包进行切换时,我注意到渲染的小插图格式发生了令人不安的变化。我在以下 R Markdown 报告中重现了该问题。
---
title: "MWE"
author: "Will Landau"
date: "11/20/2017"
output: html_document
---
```{r testcat}
for(x in LETTERS[1:3]){
cat(x, "\n")
}
```
```{r testmessage}
for(x in LETTERS[1:3]){
message(x)
}
```
```{r testmessage2}
for(x in LETTERS[1:3]){
message(x, "\n", appendLF = FALSE)
}
```
对于第一个代码块,我得到了所需的输出:所有三行都串在一个灰色框中。
## A
## B
## C
但是对于第二和第三块,每一行都有自己单独的灰色框。
## A
.
## B
.
## C
如何继续使用 message()
而不会像这样切断 knitr
输出?
您可以尝试构建字符串并将消息函数放在循环之外,如下所示:
```{r testmessage}
single_message <- c()
for(x in LETTERS[1:3]){
single_message <- paste(single_message , x, sep = "\n")
}
message(single_message )
```
请注意,此示例确实在开头添加了换行符,您可以使用额外的 if
来防止这种情况,或者使用循环外的第一个元素来初始化 single_message
.
我想我已经解决了:knitr
有一个 collapse
块选项。我所需要的只是将这个块放在任何其他块之前。
```{r setup}
knitr::opts_chunk$set(collapse = TRUE)
```
输出比我预期的更简洁,但经过一些修饰后,格式现在看起来好多了。