使用knitr :: purl进行块引用

时间:2016-12-08 11:21:38

标签: r knitr

在我看来,knitr::purl不处理块引用。参见例如

cat('
```{r label, eval = FALSE}
print("Second: hello world!")
```

This is first.

```{r ref.label = "label", echo = FALSE}
```
', file = "test.Rmd")

现在我们使用knitpurl来处理这个问题。

knitr::knit("test.Rmd", "test.md")
knitr::purl("test.Rmd", "test.R")

cat(readLines("test.md"), sep = "\n")

#> ```r
#> print("Second: hello world!")
#> ```
#>
#> This is first.
#>
#>
#> ```
#> ## [1] "Second: hello world!"
#> ```

cat(readLines("test.R"), sep = "\n")

#> ## ----label, eval = FALSE---------------------------------------------
#> ## print("Second: hello world!")
#>
#> ## ----ref.label = "label", echo = FALSE-------------------------------
#>

我不完全确定echo=FALSEpurl的意义,但echo=TRUE也不起作用。 purl=TRUE和/或eval=TRUE也会生成相同内容。

我在这里误解了什么吗?我不应该purl只输出knit运行的代码吗?

1 个答案:

答案 0 :(得分:1)

以下是我的解决方法。对于我不想运行的块,但想要包含在我指定.html的{​​{1}}和.R输出中,例如

purl = TRUE

然后以通常的方式引用它们,但使用```{r label, eval = FALSE, purl = TRUE} server <- function(input, output, session) { rvs <- reactiveValues(data = NULL) # ... } ``` 例如

purl = FALSE

然后使用此后处理函数取消注释具有```{r ref.label = label, purl = FALSE, echo = FALSE} ``` 的部分:

purl = TRUE