Включить код из внешнего скрипта R, запустить, отобразить как код, так и вывод

Можно ли включить код из внешнего R-скрипта в.Rmd и одновременно запустить код, отобразить код и отобразить его результаты в выходном файле.HTML? Например, если у меня есть

x <- 1
y <- 3
z <- x + y
z

in 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?

Ответ 1

Хотя принятый ответ дает простое и эффективное решение, я думаю, что самый идиоматический способ сделать это (без необходимости изменять внешний скрипт вообще) заключается в использовании code опции chunk для установки содержимого external.R виде кода куска:

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

Ответ 2

Вы можете задать 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

Ответ 3

Существует еще один способ сделать это, чтобы он выглядел точно так же, как наличие кода в файле уценки.

Ваш файл 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