格式化错误消息,避免Rmarkdown中的换行符
我正在探索格式化错误消息,避免Rmarkdown中的换行符,r,r-markdown,R,R Markdown,我正在探索cat()和message()格式化函数输出的可能性 当我使用cat(fill=TRUE)时,会在消息末尾添加一行新行,这样可以很好地打印后续消息。当我设置fill=FALSE时,这些消息打印在同一行中 由于某些原因,当我以非交互方式运行代码并通过rmarkdown将代码编织到时,这种打印行为会发生变化。一行中的消息现在被多行分隔开了,我不知道为什么或者如何解决这个问题。(互动会话的情况并非如此,比如在Rstudio中) 请参阅下面的最小示例,并以交互方式尝试以查看差异 Rmarkdo
cat()
和message()
格式化函数输出的可能性
当我使用cat(fill=TRUE)
时,会在消息末尾添加一行新行,这样可以很好地打印后续消息。当我设置fill=FALSE
时,这些消息打印在同一行中
由于某些原因,当我以非交互方式运行代码并通过rmarkdown将代码编织到时,这种打印行为会发生变化。一行中的消息现在被多行分隔开了,我不知道为什么或者如何解决这个问题。(互动会话的情况并非如此,比如在Rstudio中)
请参阅下面的最小示例,并以交互方式尝试以查看差异
Rmarkdown输出
打印消息第1行
#>二线
打印消息(换行符=FALSE)#这就是产生差异的地方
#>一线
#>二线
交互输出
打印消息第1行
#>二线
打印消息(换行符=FALSE)#这就是产生差异的地方
#>一线二线
由(v0.2.1)于2019-02-04创建,这是由于正常块输出和消息在相应的系统中分别处理。在该过程中,换行符(
\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)
})
```
如您所见,降价代码块由换行符包装。这似乎是正确的对于几个代码块,您有没有建议如何最好地关闭此功能?可能会暂时覆盖钩子?(我还没有发现,
消息
和输出
钩子中引入额外换行符的确切位置,或者如何最好地修改它们。)您想要实现什么?在我看来,默认行为是有道理的。是的,它有道理。但是我想说明在消息中添加“\n”的重要性,knitr输出不允许我给出一个好的示例。(将输出硬拷贝到块中,并暂时设置eval=FALSE
)如果这就是全部,那么为什么不选择cat(“第一行”)cat(“第二行”)
,而不是混合这两种类型的输出?
[1] "\n\n```\n## 2nd line\n```\n\n"
[1] "\n\n```\n## 2nd line\n```\n\n"