Включить код из внешнего скрипта 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]()