格式错误消息避免Rmarkdown换行符

问题描述 投票:0回答:1

我正在探索cat()message()的可能性格式化我的函数的输出。

当我使用cat(fill = TRUE)一个新行被添加到该消息,这允许后续消息的漂亮的打印结束。当我设置fill = FALSE,这些消息被打印在同一行中。

出于某种原因,该打印行为的变化,当我运行的代码非交互,并通过rmarkdown代码编织成。在一行中的消息一旦现在分开了多行 - 我无法弄清楚,为什么或如何解决这个问题。 (这不是互动环节的情况下,例如在Rstudio)

请参阅小例子,下面和尝试interactivly看出区别。

Rmarkdown输出

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)

r r-markdown r-base
1个回答
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"

正如你所看到的,降价的代码块被换行包装。

© www.soinside.com 2019 - 2024. All rights reserved.