Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行knit to.Rmd输出时,块无效 问题_R_Knitr - Fatal编程技术网

运行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
    中,块的输出是不可取的,只有块内容。