我正在探索cat()
和message()
的可能性格式化我的函数的输出。
当我使用cat(fill = TRUE)
一个新行被添加到该消息,这允许后续消息的漂亮的打印结束。当我设置fill = FALSE
,这些消息被打印在同一行中。
出于某种原因,该打印行为的变化,当我运行的代码非交互,并通过rmarkdown代码编织成。在一行中的消息一旦现在分开了多行 - 我无法弄清楚,为什么或如何解决这个问题。 (这不是互动环节的情况下,例如在Rstudio)
请参阅小例子,下面和尝试interactivly看出区别。
print_messages <- function(newline = TRUE){
cat("1st line", fill = newline)
message("2nd line")
}
print_messages()
#> 1st line
#> 2nd line
print_messages(newline = FALSE) # this is, where the difference occurs
#> 1st line
#> 2nd line
print_messages <- function(newline = TRUE){
cat("1st line", fill = newline)
message("2nd line")
}
print_messages()
#> 1st line
#> 2nd line
print_messages(newline = FALSE) # this is, where the difference occurs
#> 1st line2nd line
由reprex package创建于2019年2月4日(v0.2.1)
这是由于这样的事实,即正常块输出和消息在相应hooks seperately处理。在这个过程中换行符(\n
)之前和cat()
的输出以及message()
后插入。您可以通过在你的RMarkdown文档的开头做下面这个阐明:
```{r, echo = F}
defMessageHook <- knitr::knit_hooks$get("message")
knitr::knit_hooks$set(message = function(x, options) {
x <- defMessageHook(x, options) # Apply default hook
print(x)
return(x)
})
```
在这里,我们保存默认消息钩子,并重新定义它。在新的挂钩,我们应用默认挂钩并添加print()
语句来看看默认的勾造出来我们的信息(检查旁边的控制台将R降价图):
[1] "\n\n```\n## 2nd line\n```\n\n"
[1] "\n\n```\n## 2nd line\n```\n\n"
正如你所看到的,降价的代码块被换行包装。