r - 如果块有 message = FALSE,则安静地渲染不起作用
问题描述
我想安静地渲染一个 R Markdown 文件,即控制台中不应该显示任何内容。让我们foo.Rmd
成为以下文件:
---
title: "Foo"
output:
html_vignette
vignette: >
%\VignetteIndexEntry{Foo}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r}
library(survey)
```
使用rmarkdown::render("foo.Rmd", quiet = TRUE)
正常。但是,如果我添加message=FALSE
到块中,则会出现一些由加载包生成的消息:
---
title: "Foo"
output:
html_vignette
vignette: >
%\VignetteIndexEntry{Foo}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, message=FALSE}
library(survey)
```
> rmarkdown::render("foo.Rmd", quiet = TRUE)
Loading required package: grid
Loading required package: Matrix
Loading required package: survival
Attaching package: 'survey'
The following object is masked from 'package:graphics':
dotchart
(请注意,每次添加或删除时都必须重新启动会话message=FALSE
,因为每个会话只显示一次消息。)
这是一个错误吗?还是我错过了什么?
解决方案
我认为,它不一定是“错误”。R
认为无论如何都应该显示消息。我认为quiet
函数中的参数render
可以很好地抑制任何内容,同时确保消息显示在某处(在Rmarkdown
输出中)。
但是当您在Rmarkdown
输出中抑制消息时,在控制台中打印消息会取代quiet
功能,因为R
想要在某个地方显示消息(可能在“输出”或“控制台”中)。github中也出现了
同样的问题,我认为这与您的问题有些相似。
您的问题也可能出现在 github 中,因此开发人员会考虑更改此选项。bash chunk
knitr
R
你当然知道,完全摆脱消息的一种方法是使用sink
函数将所有消息转移到文件中。
然后,您可以像以前一样在“输出”中message = F
抑制消息,也可以在控制台中抑制消息。
Restarting R session...
> divert_file <- file("divert_file.txt",open ="wt")
> sink(divert_file, type = "message")
> rmarkdown::render("foo.Rmd", quiet = T)
>
推荐阅读
- reactjs - true 或 false on click 或 onchange 语法 reactjs
- mongodb - mongoexport 适用于本地但不适用于远程服务器
- i2c - 带有 24LC512 的 RPi4 上的 I2C
- javascript - 如何从对象中递归删除子对象?
- amazon-web-services - Lambda 触发器的 SQS 批处理无法按预期工作
- python - 下载为 html 时的 Jupyter 笔记本暗模式无法正确呈现
- android - React Native - 收到通知的自定义警报,直到用户对其采取行动
- c# - 在 C# 中的 100 万个字符串列表中搜索字符串的更好方法
- json - 无法使用 Swift Decodable 解码大括号内的 json 字符串值、转义字符和双引号
- c - 当我尝试构建和运行时,C 编程代码块不显示错误