代码之家  ›  专栏  ›  技术社区  ›  landau

在R Markdown/knitr报告中使用message()切碎输出

  •  1
  • landau  · 技术社区  · 7 年前

    我最近向 rOpenSci ,他们更喜欢使用 message() 而不是 cat() 用于用户端控制台输出。当我切换包时,我注意到渲染的渐晕图的格式发生了令人不安的变化。我在下面的R降价报告中再现了这个问题。

    ---
    title: "MWE"
    author: "Will Landau"
    date: "11/20/2017"
    output: html_document
    ---
    
    ```{r testcat}
    for(x in LETTERS[1:3]){
      cat(x, "\n")
    }
    ```
    
    ```{r testmessage}
    for(x in LETTERS[1:3]){
      message(x)
    }
    ```
    
    ```{r testmessage2}
    for(x in LETTERS[1:3]){
      message(x, "\n", appendLF = FALSE)
    }
    ```
    

    对于第一个代码块,我得到了所需的输出:所有三行串在一个灰色框中。

    ## A 
    ## B 
    ## C
    

    但对于第二个和第三个块,每一行都有其各自的灰色方框。

    ## A
    

    .

    ## B
    

    .

    ## C
    

    我如何继续使用 消息() 没有切碎 knitr 像这样输出?

    2 回复  |  直到 7 年前
        1
  •  1
  •   landau    7 年前

    我想我解决了: knitr 有一个 collapse

    ```{r setup}
    knitr::opts_chunk$set(collapse = TRUE)
    ```
    

    输出比我预期的要简洁,但经过一些润色后,现在的格式实际上看起来好多了。

        2
  •  0
  •   Rutger    7 年前

    您可以尝试构建字符串,并将消息函数放在循环之外,如下所示:

    ```{r testmessage}
    single_message <- c()
    for(x in LETTERS[1:3]){
      single_message <- paste(single_message , x, sep = "\n")
    }
    message(single_message )
    ```
    

    注意,这个例子确实在开头添加了一个换行符,您可以使用额外的 if ,或使用循环外的第一个元素进行初始化 single_message .