包含来自外部R脚本的代码,运行,同时显示代码和输出

时间:2018-09-19 03:08:11

标签: r r-markdown knitr

是否可以在.Rmd中包含来自外部R脚本的代码,并同时运行该代码,显示该代码并将其结果显示在输出.HTML文件中?例如,如果我有

x <- 1
y <- 3
z <- x + y
z
external.R

。在输出文档中,我想查看上面的代码以及z的结果,即4。本质上,我希望获得与我在R块中复制/粘贴上面的代码时所发生的等效操作。所以我要

```{r}
some.library::some.function("external.R")
```

等同于

```{r}
x <- 1
y <- 3
z <- x + y
z
```

在输出的HTML文件中。 我已经尝试过类似knitr::read_chunk('external.R)source('external.R)`的事情,但是这些都不显示代码。我想念一些简单的东西吗?


编辑

我发现source('external.R', echo = TRUE)会产生我的要求,但是输出的显示代码/结果的每一行都以##开头。有什么方法可以使它看起来像是将代码简单地复制/粘贴到.Rmd中的块中一样?

3 个答案:

答案 0 :(得分:10)

尽管accepted answer提供了一个简单且可行的解决方案,但我认为最惯用的方式(根本无需修改外部脚本)是使用chunk option code来设置内容external.R作为组块代码:

```{r, code = readLines("external.R")}
```

答案 1 :(得分:7)

还有另一种方法可以使完全就像在markdown文件中包含代码一样。

您的external.R文件:

## @knitr answer
x <- 1
y <- 3
z <- x + y
z

您的Rmarkdown文件:

---
title: "Untitled"
output: html_document
---

```{r echo=FALSE}
knitr::read_chunk('external.R')
```

```{r}
<<answer>>
```

产生: enter image description here

答案 2 :(得分:6)

您可以在代码块选项中设置comment = NA

示例:

---
title: "Untitled"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(
    echo = TRUE,
    comment=NA)
```

## Example

```{r}
source("example.R", echo = T, prompt.echo = "", spaced = F)
```

这产生

enter image description here