是否可以使用 "print()" 调试 R Markdown 块以在控制台上查看某些变量?

Is it possible to debug an R Markdown chunk using "print()" to see certain variables on console?

在 R Markdown 中出现以下错误:

  |......................................................................| 100%
label: heatmap_placement (with options)
List of 2
 $ echo   : logi TRUE
 $ results: chr "asis"

Quitting from lines 176-230 (summary_report_v03.Rmd)
Error in readChar(con, 5L, useBytes = TRUE) : cannot open the connection
Calls: hmp2rep ... withCallingHandlers -> withVisible -> eval -> eval -> load -> readChar

我收到此错误似乎是因为它无法打开 R 代码块中的某些文件(这是一段带有一些嵌套 for 循环的代码)。

为了调试,我使用了一些“print()”函数来检查一些变量并查看屏幕上的错误。但是,由于错误在一个块中,所以我看不到任何东西。

是否可以使用“print()”函数调试 Rmd 块以查看内部发生的情况?不然我怎么猜bug在哪里?

如果您将块选项设置为不在文档中包含消息,则可以使用 message() 来完成。例如,

```{r message=FALSE}
x <- runif(1)
message(x)
```

另一种可能性是将未使用的块选项设置为字符串,例如

```{r chunkmsg=paste("x = ", x)}
y <- 1
```

同时使用这两个将其打印到控制台:

  |..................                                                    |  25%
  ordinary text without R code

  |...................................                                   |  50%
label: unnamed-chunk-1 (with options) 


processing file: Untitled.Rmd
List of 1
 $ message: logi FALSE

  |....................................................                  |  75%
  ordinary text without R code

  |......................................................................| 100%
label: unnamed-chunk-2 (with options) 
List of 1
 $ chunkmsg: chr "x =  0.287577520124614"


0.287577520124614
output file: Untitled.knit.md

/Applications/RStudio.app/Contents/MacOS/pandoc/pandoc +RTS -K512m -RTS Untitled.knit.md --to html4 --from markdown+autolink_bare_uris+tex_math_single_backslash --output Untitled.html --lua-filter /Library/Frameworks/R.framework/Versions/4.1/Resources/library/rmarkdown/rmarkdown/lua/pagebreak.lua --lua-filter /Library/Frameworks/R.framework/Versions/4.1/Resources/library/rmarkdown/rmarkdown/lua/latex-div.lua --self-contained --variable bs3=TRUE --standalone --section-divs --template /Library/Frameworks/R.framework/Versions/4.1/Resources/library/rmarkdown/rmd/h/default.html --no-highlight --variable highlightjs=1 --variable theme=bootstrap --include-in-header /var/folders/d6/s97fjjxd3_9353x_lwb692100000gn/T//Rtmp4tTiD4/rmarkdown-str44473d4f8885.html --mathjax --variable 'mathjax-url:https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML' 

Output created: Untitled.html

注意 chunkmsg 字符串出现在块列表中,而 message() 字符串出现在所有块列表之后。在某些情况下 message() 字符串会出现得更早;我认为这取决于以下块中的内容。