【问题标题】:Rendering multiple R scripts as markdown within single markdown file在单个降价文件中将多个 R 脚本呈现为降价
【发布时间】:2017-12-03 13:17:17
【问题描述】:

我有几个使用 #' 记录的 R 脚本,目的是将所有脚本合并到一个 .Rmd 文件中。

我从this post 看到,使用主.Rmd 文件中的代码块组合多个.Rmd 文件非常简单

这很好,但我更喜欢将我的代码保留为 .R 文件,因为它的预期目的运行得更快,并且文档的呈现不会经常发生。

首先我在主降价文件中尝试了这个:

```{r, child = "script.R"}
```

但这并没有正确呈现 - 基本上是一堆带有 #'s 的降价文本。

然后我尝试使用blog post 中描述的内容,以便将 R 脚本合并到一个降价文件中:

```{r}
library(rmarkdown)
rmarkdown::render("script.R")
```

但这只会产生script.md 并且不会将降价嵌入到主文件中。关于如何在主文件中正确地将.R 脚本呈现为降价的任何想法?

【问题讨论】:

    标签: r knitr r-markdown


    【解决方案1】:

    这是我的方法。它将使用rmarkdown::render 生成md 文件,然后通过将选项results 设置为asis 来读取md 文件的内容并将其合并到主文件中。缺点是该方法会生成一些临时文件,性能可能不是很好,但达到了目的。

    ---
    title: "test"
    author: "Consistency"
    date: "2017/6/29"
    output: html_document
    ---
    
    ```{r setup, include=FALSE}
    knitr::opts_chunk$set(echo = TRUE)
    
    join <- function(ls, sep = ", "){
        do.call(paste, append(ls, list(sep = sep)))
    }
    
    inline_render <- function(script_name){
        suppressMessages(capture.output(rmarkdown::render(paste0(script_name, ".R"), output_format = "rmarkdown::md_document"), file = "tmp"))
        cat(join(readLines(paste0(script_name, ".md")), "\n"))
    
    }
    ```
    
    ```{r script, echo=FALSE, results='asis'}
    inline_render("script")
    ```
    
    ```{r script1, echo=FALSE, results='asis'}
    inline_render("script1")
    ```
    

    【讨论】:

    • 感谢您的回答 - 这对我有用,但它似乎使我的降价中的图表停止显示。特别是使用grViz() 函数和diagrammeR 包创建的图表
    • 这是一个无关紧要的问题。但我遇到的一个问题是添加其他脚本时出现此错误Quitting from lines NA-87 (script2.spin.Rmd) Error in parse_block(g[-1], g[1], params.src) : duplicate label 'unnamed-chunk-1'
    • @Warner 看来第二个问题是标签冲突引起的,所以解决方法是给代码块加标签,就像我编辑的答案一样。
    • @Warner 您能否提供一些您的DiagrammeR 代码的模仿示例,以便我进行测试?谢谢。
    • @Warner 由于DiagrammeR生成的结果是htmlwidget,所以一个可能的解决方案是修改inline_render函数,所以输出是html_document而不是md_document,并且还有cat(join(readLines(paste0(script_name, ".html")), "\n")) 而不是cat(join(readLines(paste0(script_name, ".md")), "\n"))。然后它似乎工作了。
    猜你喜欢
    • 2014-07-30
    • 2022-12-03
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 2020-12-03
    • 2020-04-28
    • 2019-03-25
    • 1970-01-01
    相关资源
    最近更新 更多