运行knit to.Rmd输出时,块无效 问题
当尝试将包含运行knit to.Rmd输出时,块无效 问题,r,knitr,R,Knitr,当尝试将包含read\u chunk行的.Rmd从purl脚本编织成父.Rmd时,这些chunk不完整,只形成代码块。我希望能够正常编织输出文件 代码 main.Rmd --- output: html_document --- ```{r, include=FALSE} knitr::read_chunk("script_chunk.R") ``` ### Print sessionInfo() ```{r, ref.label='script_chunk', eval=FALSE} `
read\u chunk
行的.Rmd从purl
脚本编织成父.Rmd时,这些chunk不完整,只形成代码块。我希望能够正常编织输出文件
代码
main.Rmd
---
output: html_document
---
```{r, include=FALSE}
knitr::read_chunk("script_chunk.R")
```
### Print sessionInfo()
```{r, ref.label='script_chunk', eval=FALSE}
```
脚本\u chunk.R
# ---- script_chunk
sessionInfo()
编织
当我使用knit(“main.Rmd”、“output.Rmd”)
处理此文件时,会生成以下文件:
---
output: html_document
---
### Print sessionInfo()
```r
sessionInfo()
```
但是,区块的所需输出为:
```{r script_chunk}
sessionInfo()
```
当前当我knit
output.Rmd时,我只得到一个未计算的代码块,因为块缺少花括号(最好是块名)
变通办法
我可以使用readLines
实现我的目标,例如:
```{r, results='asis', collapse=TRUE, echo=FALSE}
cat("```{r script_chunk}\n")
cat(paste(readLines("script_chunk.R"), "\n", collapse = ""))
cat("```\n")
```
有没有更优雅的方法可以做到这一点?有一个稍微优雅一点的解决方案:
# 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")
```
#main.Rmd
---
输出:html\u文档
---
###打印会话信息()
```{r,results=“asis”,echo=FALSE}
chunk\u line我使用的另一种方法是与knit\u 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")
```
```{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 ...
```
想法:
out
是一个可怕的名字李>
我经常使用它在零个或多个事物上迭代单个子文档(处理一个“事物”),因此out
可以包含多个调用knit\u child
将一个Rmd编织成另一个Rmd感觉很奇怪。你确定你能做到吗?output.Rmd不仅仅是一个带有错误扩展名的降价文档吗?这就是我这么说的原因。你确定你没有生成一个简单的降价文档,这就是为什么你会得到一个不可执行的R块。你不能只使用eval=TRUE
,然后直接将结果打印到HTML?@F.Privé,不,中间文件将需要在不访问原始子文件的情况下重新生成这肯定是一个改进!如果您希望能够从main.Rmd
编制最终文档或中间文档,您对如何实现这一点有何想法?感谢您添加到对话中。我仍然支持Nathan早期的方法,因为子文档是.R
脚本(来自purl
),而不是R标记。另外,在output.Rmd
中,块的输出是不可取的,只有块内容。