【发布时间】:2017-03-24 00:38:38
【问题描述】:
已经有一些关于此的问题,但它们要么不清楚,要么提供了不起作用的解决方案,可能是因为它们已经过时了:
- Proper R Markdown Code Organization
- How to source R Markdown file like `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
在here 中提到了这个命令,但据我所知,它实际上与source 的作用相同:它加载代码但不显示任何内容。
如何获得所需的输出?
【问题讨论】:
标签: r r-markdown rnotebook