Del*_*eet 7 r r-markdown rnotebook
有一些问题已经存在,但它们要么不清楚,要么提供无效的解决方案,可能是因为它们已经过时了:
R Markdown/Notebook很不错,但就其呈现方式而言,通常只有一个文件包含所有文本和所有代码块.我经常有一些项目,这样的单一文件结构不是一个好的设置.相反,我使用单个.R主.R文件按顺序加载其他文件.我想使用R Notebook复制这个结构,即我有一个.Rmd文件,我从多个.R文件中调用代码.
以这种方式使用项目的好处是,它允许使用.R文件的RStudio进行良好的正常工作流程,但也可以使用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")
Run Code Online (Sandbox Code Playgroud)
plot.R
#setosa only
ggplot(setosa, aes(Sepal.Length)) +
geom_density()
#all together
ggplot(d, aes(Sepal.Length, color = Species)) +
geom_density()
Run Code Online (Sandbox Code Playgroud)
然后是笔记本文件:
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
```
Run Code Online (Sandbox Code Playgroud)
所期望的输出是其中的一个从手动复制在代码获取start.R和plot.R到在代码块notebook.Rmd.这看起来像这样(由于缺少屏幕空间而丢失了一些):
source这会加载代码,但不会显示它.它只显示source命令:
knitr::read_chunk这里提到了这个命令,但实际上它source和我所说的一样:它加载代码但什么也没显示.
如何获得所需的输出?
解决方案是使用knitr的chunk选项code。根据knitr文档:
code:(NULL;字符)如果提供,它将覆盖当前块中的代码;这允许我们以编程方式将代码插入到当前块中;例如,块选项 code = capture.output(dump(' Fivenum', '')) 将使用函数 Fivenum 的源代码来替换当前块
但是没有提供示例。听起来好像必须为其提供一个字符向量,所以让我们尝试一下readLines:
```{r start, code=readLines("start.R")}
```
```{r plot, code=readLines("start.R")}
```
Run Code Online (Sandbox Code Playgroud)
这会产生所需的输出,从而允许模块化的项目结构。
直接向其提供文件不起作用(即code="start.R"),但将是一个很好的增强。
| 归档时间: |
|
| 查看次数: |
1266 次 |
| 最近记录: |