运行knit到.Rmd输出时,块无效

时间:2017-12-21 00:55:43

标签: r knitr

问题

尝试将knit包含read_chunkpurl行的 .Rmd 行添加到父 .Rmd 时,这些块不完整,只有表单代码块。我希望能够正常knit输出文件。

代码

main.Rmd

---
output: html_document
---

```{r, include=FALSE}
knitr::read_chunk("script_chunk.R")
```

### Print sessionInfo()

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

script_chunk.R

# ---- script_chunk
sessionInfo()

针织

当我使用knit("main.Rmd", "output.Rmd")处理时,会生成以下文件:

---
output: html_document
---



### Print sessionInfo()


```r
sessionInfo()
```

但是,块的所需输出是:

```{r script_chunk}
sessionInfo()
```

当我knit output.Rmd 时,我只得到一个未评估的代码块,因为该块缺少花括号(最好是块名称)。

enter image description here

解决方法

我可以使用readLines来实现我之后的目标,例如:

```{r, results='asis', collapse=TRUE, echo=FALSE}
cat("```{r script_chunk}\n")
cat(paste(readLines("script_chunk.R"), "\n", collapse = ""))
cat("```\n")
```

有更优雅的方法吗?

2 个答案:

答案 0 :(得分:6)

有一个略微更优雅的解决方案:

# main.Rmd
---
output: html_document
---

### Print sessionInfo()

```{r, results="asis", echo = FALSE}
chunk_lines <- knitr::spin(text = readLines("script_chunk.R"), knit = FALSE)
cat(chunk_lines, sep = "\n")
```

但请记住,就knitr而言,你的输出是明显的Markdown。 knitr只能output to certain formats:LaTeX,Sweave,HTML,Markdown或Jekyll。虽然您的输出文件具有.Rmd扩展名,但其内容是明确的Markdown,因为它是R Markdown文件的默认值。

请注意,输出中所需的所有代码块都必须写为动态输出。这可能会在main.Rmd中留下混淆的代码。

答案 1 :(得分:3)

我使用的替代方法是使用knit_child

  • main.Rmd

    ---
    output: html_document
    ---
    
    ```{r, include=FALSE}
    out <- knitr::knit_child("script_chunk.Rmd")
    ```
    
    ### Print sessionInfo()
    ```{r, ref.label='script_chunk'}
    paste(out, collapse = "\n")
    ```
    
  • script_chunk.Rmd

    ```{r script_chunk}
    # ---- script_chunk
    sessionInfo()
    ```
    

编译时:

---
output: html_document
---

### Print sessionInfo()

```r
# ---- script_chunk
sessionInfo()
```

```
## R version 3.3.3 (2017-03-06)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 16299)
## ... blah blah blah ...
```

思想:

  1. out是一个可怕的名字;
  2. 我经常使用它来迭代单个子文档(处理一个&#34;事物&#34;)而不是零或多个事物,因此out可以包含对{{1}的多个调用的连接结果}