Форматировать сообщение об ошибке, избегая новых строк в Rmarkdown - PullRequest
0 голосов
/ 04 февраля 2019

Я изучаю возможности cat() и message() для форматирования вывода моих функций.

Когда я использую cat(fill = TRUE), в конец сообщения добавляется новая строка, которая позволяетдля приятной печати последующих сообщений.Когда я устанавливаю fill = FALSE, эти сообщения печатаются в одной строке.

По какой-то причине это поведение печати изменяется, когда я запускаю код неинтерактивно и связываю код с помощью rmarkdown. Сообщение один раз в одной строке теперь разделено на несколько строк - и я не могу понять, почему или как это исправить. (это не относится к интерактивным сеансам, скажем, в Rstudio)

Пожалуйста, посмотрите минимальный пример ниже и попробуйте его интерактивно, чтобы увидеть разницу.

Rmarkdown Output

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

Создано в2019-02-04 по представлению пакета (v0.2.1)

1 Ответ

0 голосов
/ 04 февраля 2019

Это связано с тем, что обычный вывод чанка и сообщения обрабатываются отдельно в соответствующих хуках .В процессе разрывы строк (\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 Markdown рядом с вашей консолью):

[1] "\n\n```\n## 2nd line\n```\n\n"
[1] "\n\n```\n## 2nd line\n```\n\n"

Как выМожно видеть, что фрагмент кода Markdown упакован переносами строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...