将代码推迟到knitr中的END文档

时间:2015-05-14 16:44:13

标签: r knitr r-markdown

我正在尝试在rmarkdown中编写报告,然后使用knitr生成pdf。

我希望将所有代码推送到“文档结尾”,同时只显示与我的文本交织的结果。 echo='hold'选项不会执行此操作。

我的降价文件部分

Generate data

```{r chunk1,echo='hold',R.options=}
num_seq<-rnorm(100,0.2)
num_seq
```

We further report the mean of these numbers.  

```{r,echo='hold' }
mean(num_seq)
```

我试图阅读http://yihui.name/knitr/options/中找到的相关文档,但我无法弄清楚如何执行此操作。

1 个答案:

答案 0 :(得分:14)

我不认为echo='hold'是一种选择。无论如何,诀窍是使用包含代码的echo=FALSE,然后 重复使用相同的块名称 并使用eval=FALSE想要打印代码。 (两个地方的其他选项都很好,但这两个是最低要求。)

以下内容评估了块所在的代码(并且可选地包括它的输出),但在您指定之前不包含代码。

# Header 1

```{r chunk1, echo=FALSE}
x <- 1
x + 5
```

This is a test.

```{r chunk1, eval=FALSE}
```

以下降价结果:

Header 1
========

    ## [1] 6

This is a test.

    x <- 1
    x + 5

编辑:我经常在随机性的R降价文档中使用它:我在最开始存储随机种子(无论是手动设置还是只存储当前的随机状态以供以后再现)和将其显示在附件/附录中:

# Header 1

```{r setseed, echo=FALSE, include=FALSE}
set.seed(seed <- sample(.Machine$integer.max, size=1))
seed
```

This is a test `r seed`.

# Annex A {-}

```{r showsetseed, ref.label='setseed', eval=FALSE}
```

```{r printseed, echo=FALSE}
seed
```

此示例不包含原始代码块的结果。不幸的是,结果没有存储,如果我在以后使用相同的块名称时设置eval=TRUE,它将计算并呈现不同的种子。这就是printseed阻止的原因。我明确&#34;显示&#34;的原因第一个seed块中的setseed完全是这样的,在附件中,showsetseedprintseed块流畅。 (否则,set.seed不会返回一个数字,所以它看起来很奇怪。)

BTW:第二个例子使用了ref.label,Yihui将here作为块重用的更通用的方法。

BTW#2:当我说&#34;存储随机状态&#34;时,这不完全正确...我存储了一个随机生成的种子。当然,随机状态本身比单个整数大得多。我不想激怒PRNG众神: - )