По этому поводу уже есть несколько вопросов, но они либо неясны, либо предлагают решения, которые не работают, возможно, потому, что они устарели:
- Правильная организация кода R Markdown
- Как получить файл R Markdown, например `source('myfile.r ')`?
- http://yihui.name/knitr/demo/externalization/
Модульная структура кода для больших проектов
R Markdown/Notebook хорош, но в том виде, в котором он представлен, обычно есть один файл, содержащий весь текст и все фрагменты кода. У меня часто бывают проекты, где такая единая файловая структура не является хорошей настройкой. Вместо этого я использую один мастер-файл .R
, который загружает другие файлы .R
по порядку. Я хотел бы воспроизвести эту структуру с помощью R Notebook, т.е. чтобы у меня был один файл .Rmd
, из которого я вызываю код из нескольких файлов .R
.
Преимущество такого способа работы с проектом заключается в том, что он обеспечивает нормальный рабочий процесс с RStudio с использованием файлов .R
, а также аккуратный вывод из R Notebook/Markdown без дублирования кода.
Минимальный пример
Это упрощено, чтобы сделать пример как можно меньше. Два файла .R
и один мастер-файл .Rmd
.
start.R
# libs --------------------------------------------------------------------
library(pacman)
p_load(dplyr, ggplot2)
#normally load a lot of packages here
# data --------------------------------------------------------------------
d = iris
#use iris for example, but normally would load data from file
# data manipulation tasks -------------------------------------------------
#some code here to extract useful info from the data
setosa = dplyr::filter(d, Species == "setosa")
plot.R
#setosa only
ggplot(setosa, aes(Sepal.Length)) +
geom_density()
#all together
ggplot(d, aes(Sepal.Length, color = Species)) +
geom_density()
И затем файл блокнота:
notebook.Rmd
:
---
title: "R Notebook"
output:
html_document: default
html_notebook: default
---
First we load some packages and data and do slight transformation:
```{r start}
#a command here to load the code from start.R and display it
```
```{r plot}
#a command here to load the code from plot.R and display it
```
Желаемый результат
Желаемый результат — это тот, который получается при ручном копировании кода из start.R
и plot.R
в фрагменты кода в notebook.Rmd
. Это выглядит так (некоторые отсутствуют из-за нехватки места на экране):
Вещи, которые я пробовал
source
Это загружает код, но не отображает его. Он просто отображает команду source
:
knitr::read_chunk
Эта команда упоминалась здесь, но на самом деле она делает то же самое, что и source
, насколько я могу судить : он загружает код, но ничего не отображает.
Как получить желаемый результат?