如何在RMarkdown中显示代码但隐藏输出?

118

我希望我的 HTML 文件展示这段代码,但不显示输出结果:

```{r echo=True, include=FALSE}
fun <- function(b)
    {
    for(a in b)
        {print(a)
        return(a * a)}
    }
y <- fun(b)
```
当我运行代码时,我需要打印出来以查看进度(实际上它是一个相当长的函数)。
但是在knitr文件中,我在另一个块中使用输出,所以我不想在这个块中看到它(并且没有进度的概念,因为代码已经运行)。
这里使用的echo=True, include=FALSE无法工作:整个东西都被隐藏了(这是include=FALSE的正常行为)。 有哪些参数可以用于隐藏打印,但显示我的代码?

74
尝试使用 {r echo=T, results='hide'} - J_F
1
很好,这正是我在寻找的!我以前从未见过那个“results”参数。 - Laurent
1
但是怎么才能隐藏所有的输出呢?使用results='hide'仍然会显示警告信息,例如在使用library(package)时掩盖对象时。是否有选项可以隐藏打印到控制台的所有内容? - stragu
4
你可以在library命令中使用warn.conflicts=F, quietly=T来做到这一点,例如library(package, warn.conflicts=F, quietly=T)。该命令的作用是禁止冲突警告,并使安装过程保持安静。 - Laurent
2
我不知道为什么,但这对我不起作用。 - T.Omalley
6个回答

110
如 @J_F 在评论中所回答的那样,使用 {r echo = T, results='hide'}
我想进一步扩展他们的回答 - 有很多资源可供您访问,以确定您的块和输出显示的所有可能选项 - 我在桌子上放了一份打印副本!
您可以在 RStudio 网站上找到它们,在CheatSheets下查找 R Markdown CheatSheet 和 R Markdown Reference Guide,或者在 RStudio 中导航到 "Help" 选项卡,选择 "CheatSheets",并在那里查找相同的文档。
最后,如果您希望大多数块具有相同的行为,则可以运行以下代码(在第一个块中)来设置默认块选项:
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = T,
                      results = "hide")
```

稍后,您可以像这样修改单个块的行为,这将替换结果选项的默认值。请注意,保留了HTML标签。
```{r analysis, results="markup"}
# code here
```

非常好。我发现在编写伪代码或创建带有可测试代码的笔记本时非常有用,但可以排除输出,以便保持简洁和整洁!谢谢。 - Meisam H
@LachlanMacnish 现在我每周有三天的办公桌?哈哈 - undefined

62

results = 'hide'选项不能防止其他消息的打印。要隐藏它们,以下选项很有用:

  • {r, error=FALSE}
  • {r, warning=FALSE}
  • {r, message=FALSE}

在每种情况下,相应的警告、错误或消息将被打印到控制台。


29
```{r eval=FALSE}

该文档默认显示代码,但会阻止代码块被执行,因此也不会显示任何结果。


2
对我来说,我想展示代码而不是图表,所以我使用了 echo=TRUE, eval=FALSE - GISHuman
对我来说,result="hide" 只显示了代码的最后一行,而 eval=F 则显示了整个代码。 - Salix
2
如果您不需要将此块的结果用于下一个块中,则仅使用“eval=F”即可。 - igorkf
我同意@igorkf的观点,如果该代码块用于下一个代码块,则eval=F不适用。应改用echo=T, results='hide' - Zawir Amin
@igorkf - 是的,我也同意。eval=F不会运行代码块。因此,任何结果在脚本的其余部分中都不可用。这些选项都有用例。 - DryLabRebel

5
对于静默载入库"library("name_of_library")"的代码,主要是展示代码,使用"{r loadlib, echo=T, results='hide', message=F, warning=F}"非常好。在我看来,这比"library(package, warn.conflicts=F, quietly=T)"更好。

library(package, warn.conflicts=F, quietly=T)在控制台中抑制消息,但当Knitr编织到HTML时,在HTML输出中不抑制消息。 - randy

5

如果要完全静音输出,这是对我有效的方法:

```{r error=FALSE, warning=FALSE, message=FALSE}
invisible({capture.output({


# Your code here
2 * 2
# etc etc


})})
```

以上使用的5种措施包括:
  1. error = FALSE (错误为假)
  2. warning = FALSE (警告为假)
  3. message = FALSE (消息为假)
  4. invisible() (不可见函数)
  5. capture.output() (捕获输出)

4
为了隐藏警告信息,您也可以执行以下操作: {r, warning=FALSE}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接