【问题标题】:Retrieving warnings generated in a knitr session检索 knitr 会话中生成的警告
【发布时间】:2019-09-22 20:34:15
【问题描述】:

我有一个很长的 R Markdown 脚本,它会生成超过 50 个 knitr 错误。它会生成一个需要修复的 .pptx 文件(尽管我看不到需要修复的内容)。有时 PowerPoint 会根据第一张标题幻灯片重命名文件。编织会话会产生一条警告消息,邀请我输入warnings() 来检查它们。只要 knitr 会话在我看不到的环境中,输入 warnings() 没有帮助。

创建的输出:demo.pptx 有 50 个或更多警告(使用 warnings() 查看前 50 个)

我无法给出产生 knitr 警告的简洁、可重复的示例,但我可以告诉您,它们来自插入符号和 gbm,它们会输出 很多 格式化输出(黑色)和未格式化消息(红色) 甚至不需要的情节,尽管默认设置为 verbose = FALSE。

这是我的 .rmd 文件的头:

---
title: "Demo of knitr warnings when making Powerpoint"
author: "author name"
output:
  powerpoint_presentation:
    slide_level: 2
---
```{r global_options, include=FALSE}
knitr::opts_chunk$set(fig.width=10, echo=FALSE, warning=FALSE, message=FALSE, cache=FALSE)
```

```{r setup}   
suppressPackageStartupMessages(library(knitr))
suppressPackageStartupMessages(library(rmarkdown))
```

如何发现 knitr 执行的环境,以便访问警告?当我试图重现警告时,我注意到我的代码生成的警告显然没有被附加到 last.warnings 列表中。

【问题讨论】:

  • 根据警告的性质,您应该可以在全局选项中设置warning=TRUE,然后在输出 PPT 中查看它们。使用它进行调试,一旦您对输出感到满意,您可以将其改回warning=FALSE

标签: r r-markdown


【解决方案1】:

是的! @user2554330 是对的。 rmarkdown::render("yourfile.Rmd") 在您自己的全球环境中工作正常。

如果您使用的是 RStudio,请记住以下几点:

  • 源是保存到磁盘的任何内容,所以不要忘记保存。
  • 您可以使用knit.global() 检查环境。无论您键入命令还是使用 knit 按钮——这显然会产生一个新的 R 会话——结果都是一样的。你可以达到第一个,但不能达到第二个。

    环境:R_GlobalEnv

  • 直到您在本地环境中才能看到对象 执行完成。
  • 而且 PowerPoint 不会自动启动。

是的,所有丑陋的警告(在我的例子中来自 gbm)都在那里。

【讨论】:

    【解决方案2】:

    使用rmarkdown::render("yourfile.Rmd") 运行 knitr,它将在当前会话中运行。然后 warnings() 将起作用。

    例如,我没有从您的代码中看到任何警告,但是当我添加时

    for ( i in 1:100)
      warning(i)
    

    对于代码块,我收到了类似您的消息。于是我用了上面的思路,看到了

    > rmarkdown::render("~/temp/Untitled.Rmd")
    
    
    processing file: Untitled.Rmd
      |................                                                 |  25%
      ordinary text without R code
    
      |................................                                 |  50%
    label: global_options (with options) 
    List of 1
     $ include: logi FALSE
    
      |.................................................                |  75%
      ordinary text without R code
    
      |.................................................................| 100%
    label: setup
    
    output file: Untitled.knit.md
    
    '/Applications/RStudio 2.app/Contents/MacOS/pandoc/pandoc' +RTS -K512m -RTS Untitled.utf8.md --to pptx --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash+smart --output Untitled.pptx --slide-level 2 
    
    Output created: Untitled.pptx
    There were 50 or more warnings (use warnings() to see the first 50)
    > warnings()
    Warning messages:
    1: In eval(expr, envir, enclos) : 1
    2: In eval(expr, envir, enclos) : 2
    3: In eval(expr, envir, enclos) : 3
    4: In eval(expr, envir, enclos) : 4
    5: In eval(expr, envir, enclos) : 5
    6: In eval(expr, envir, enclos) : 6
    7: In eval(expr, envir, enclos) : 7
    8: In eval(expr, envir, enclos) : 8
    9: In eval(expr, envir, enclos) : 9
    10: In eval(expr, envir, enclos) : 10
    11: In eval(expr, envir, enclos) : 11
    12: In eval(expr, envir, enclos) : 12
    13: In eval(expr, envir, enclos) : 13
    14: In eval(expr, envir, enclos) : 14
    15: In eval(expr, envir, enclos) : 15
    16: In eval(expr, envir, enclos) : 16
    17: In eval(expr, envir, enclos) : 17
    18: In eval(expr, envir, enclos) : 18
    19: In eval(expr, envir, enclos) : 19
    20: In eval(expr, envir, enclos) : 20
    21: In eval(expr, envir, enclos) : 21
    22: In eval(expr, envir, enclos) : 22
    23: In eval(expr, envir, enclos) : 23
    24: In eval(expr, envir, enclos) : 24
    25: In eval(expr, envir, enclos) : 25
    26: In eval(expr, envir, enclos) : 26
    27: In eval(expr, envir, enclos) : 27
    28: In eval(expr, envir, enclos) : 28
    29: In eval(expr, envir, enclos) : 29
    30: In eval(expr, envir, enclos) : 30
    31: In eval(expr, envir, enclos) : 31
    32: In eval(expr, envir, enclos) : 32
    33: In eval(expr, envir, enclos) : 33
    34: In eval(expr, envir, enclos) : 34
    35: In eval(expr, envir, enclos) : 35
    36: In eval(expr, envir, enclos) : 36
    37: In eval(expr, envir, enclos) : 37
    38: In eval(expr, envir, enclos) : 38
    39: In eval(expr, envir, enclos) : 39
    40: In eval(expr, envir, enclos) : 40
    41: In eval(expr, envir, enclos) : 41
    42: In eval(expr, envir, enclos) : 42
    43: In eval(expr, envir, enclos) : 43
    44: In eval(expr, envir, enclos) : 44
    45: In eval(expr, envir, enclos) : 45
    46: In eval(expr, envir, enclos) : 46
    47: In eval(expr, envir, enclos) : 47
    48: In eval(expr, envir, enclos) : 48
    49: In eval(expr, envir, enclos) : 49
    50: In eval(expr, envir, enclos) : 50
    

    【讨论】:

      猜你喜欢
      • 2012-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-11
      • 2012-05-18
      • 1970-01-01
      相关资源
      最近更新 更多