Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
格式化错误消息,避免Rmarkdown中的换行符_R_R Markdown - Fatal编程技术网

格式化错误消息,避免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"