我有一个相当基本的问题。假设我在rmarkdown文件中有以下代码块,它只会重置我的全局环境,加载到多个库中,并包含1个print语句。
```{r, echo = FALSE}
rm(list = ls())
# data manipulation
library(jsonlite); library(plyr); library(dplyr); library(data.table);
# data scraping
library(RSelenium); library(rvest); library(XML);
# parallel computing / faster code
library(foreach); library(doParallel); library(microbenchmark);
print("this")
# machine learning
library(rpart.plot); library(glmnet); library(rpart); library(gbm);
library(nnet); library(caret); library(randomForest);
# lineup optimization
library(lpSolve);
# data visualization
library(ggplot2); library(reshape2);
```
当我运行它时,我在控制台中得到以下输出
> rm(list = ls())
>
> # data manipulation
> library(jsonlite); library(plyr); library(dplyr); library(data.table);
>
> # data scraping
> library(RSelenium); library(rvest); library(XML);
>
> # parallel computing / faster code
> library(foreach); library(doParallel); library(microbenchmark);
>
> print("this")
[1] "this"
>
> # machine learning
> library(rpart.plot); library(glmnet); library(rpart); library(gbm);
> library(nnet); library(caret); library(randomForest);
>
> # lineup optimization
> library(lpSolve);
>
> # data visualization
> library(ggplot2); library(reshape2);
然而,我认为设置echo = false的目的是除了[1]“this”之外的所有内容都应该在控制台中被抑制,这就是我想要的。什么是设置echo = FALSE实际上在做什么?我实际上要做些什么来抑制控制台中代码的重复?我的其余代码都有重要的打印语句,可以确认我的代码是否正常运行,但是代码重复会在控制台中被淹没。
谢谢,
答案 0 :(得分:2)
请注意,块选项仅影响编织时的输出显示。采购独立于针织的代码需要采用不同的方法。
当您加载包时,您在大多数时间看到的是消息,而不是源代码。因此,为了抑制## Attaching package: 'dplyr' ...
之类的内容,您还必须添加选项message = FALSE
,因此块指令将{r , echo = FALSE, message = FALSE}
来抑制编织文档中的消息和源代码。
答案 1 :(得分:0)
Knitr
并非旨在改变控制台中显示的内容。 R控制台和历史记录保留了所有命令和输出的完美,逐字复制,据我所知,没有办法改变这种行为。我强烈建议您也不应该尝试更改它,因为想象一下您运行了一些分析并忘记运行代码块:您没有要检查的命令的审计跟踪。
Knitr
旨在创建文档(大多数情况下为html,docx或pdf),更改chunk选项(如echo
会影响生成的文档中显示的内容,不< / em>控制台。如何控制输出在knitr网页上有详细记录:http://yihui.name/knitr/demo/output/
确定我们不会得到您想要的内容,这里有一些选项可以帮助您将代码与输出分开:
ctrl/cmd + L
这简单地清除了控制台,因此您可以单步执行,清除您不需要的内容,并运行带有结果的代码段。这需要大量的人工干预;不推荐。
sink()
sink()
允许您将输出保存到文本文件,因此.R
脚本的流程可能如下所示:
...
# parallel computing / faster code
library(foreach); library(doParallel); library(microbenchmark);
sink(file = "test.txt")
print("this")
sink()
# machine learning
library(rpart.plot); library(glmnet); library(rpart); library(gbm);
library(nnet); library(caret); library(randomForest);
sink(file = "test.txt", append = TRUE)
print("that")
sink()
...
test.txt
的内容现在看起来像这样:
[1] "this"
[1] "that"
不要忘记 append = TRUE
,否则内容将被覆盖,这可能不是您想要的。
sink()
有效,但现在有更简单,更优雅的解决方案......
knitr
(按预期)我一直使用knitr
正是因为您正在寻找解决方案,即将执行代码与结果分开。
分开你的块和下面的例子(编织时!)将为你提供一份与你正在寻找的文件相符的文件:
---
title: "test"
author: "Canovice"
date: "22 December 2016"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(
echo = FALSE,
message = FALSE,
warning = FALSE
)
```
```{r}
# rm(list = ls())
# you don't need this
# by default, each time you knit, knitr uses a clean session
# data manipulation
library(jsonlite); library(plyr); library(dplyr); library(data.table)
# data scraping
library(RSelenium); library(rvest); library(XML)
# parallel computing / faster code
library(foreach); library(doParallel); library(microbenchmark)
```
```{r}
print("this")
```
```{r}
# machine learning
library(rpart.plot); library(glmnet); library(rpart); library(gbm);
library(nnet); library(caret); library(randomForest);
# lineup optimization
library(lpSolve);
# data visualization
library(ggplot2); library(reshape2)
```
结果文档只显示代码的结果:
测试
Canovice
2016年12月22日
## [1] "this"
在RStudio版本中&gt; 1.0你可以使用新的R笔记本格式,其工作方式与Rmarkdown knitr文档相同,只是有一个方便的按钮,可以根据需要显示或隐藏代码。
例如:https://rpubs.com/pssguy/220641
在页面顶部,每个部分都有一个显示或隐藏代码的选项,只留下结果。