【问题标题】:Proper R Markdown Code Organization正确的 R Markdown 代码组织
【发布时间】:2015-08-05 03:20:42
【问题描述】:

我一直在阅读 R Markdown(hereherehere)并使用它来创建可靠的报告。我想尝试使用我正在运行的小代码进行一些临时分析,并将它们转化为更具可扩展性的数据报告。

我的问题相当广泛:有没有合适的方法来围绕 R Markdown 项目组织代码?比如说,有一个脚本可以生成所有数据结构吗?

例如:假设我有cars 数据集,并且我引入了制造商的商业数据。如果我想将制造商附加到当前的 cars 数据集,然后使用操纵数据集 cars.by.name 为每个公司生成单独的汇总表,并使用 cars.import 绘制某个样本怎么办?

编辑:现在我打开了两个文件。一种是具有所有数据操作的 R 脚本文件:子集和重新分类值。另一个是 R Markdown 文件,我在其中构建文本以伴随各种表格和感兴趣的图。当我从 R 脚本文件中调用一个对象时——比如:

```{r}
table(cars.by.name$make)
```

我收到一条错误消息,提示 Error in summary(cars.by.name$make) : object 'cars.by.name' not found

编辑 2: 我发现这个旧线程很有帮助。 Link

---
title: "Untitled"
author: "Jeb"
date: "August 4, 2015"
output: html_document
---


This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.

When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

```{r}
table(cars.by.name$make)
```  

```{r}
summary(cars)
summary(cars.by.name)
```

```{r}
table(cars.by.name)
```   
You can also embed plots, for example:

```{r, echo=FALSE}
plot(cars)
plot(cars.import)
```

Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.

【问题讨论】:

  • “拥有一个生成所有相关对象的单独脚本,然后在 R Markdown 脚本中调用这些对象”到底是什么意思?
  • @jebediah 我没有使用 R markdown 的经验,但是在您的 markdown 文档中,您能否 source 生成对象的单独脚本?
  • @HongOoi 我添加了一些额外的上下文。
  • @kevinsa5 使用source 有效

标签: r r-markdown


【解决方案1】:

这类问题有一个解决方案,解释了here

基本上,如果您有一个包含代码的 .R 文件,则无需重复 .Rmd 文件中的代码,但您可以包含 .R 文件中的代码。为此,代码块应在 .R 文件中命名,然后可以按名称包含在 .Rmd 文件中。

test.R:

## ---- chunk-1 ----
table(cars.by.name$make)

test.Rmd

仅在 .Rmd 文件顶部一次:

```{r echo=FALSE, cache= F}
knitr::read_chunk('test.R')
```

对于您包含的每个块(将 chunk-1 替换为 .R 文件中该特定块的标签):

```{r chunk-1}
```

请注意,它应该留空(原样),并且在运行时,来自 .R 的代码将被带到这里并运行。

【讨论】:

  • 是的!这是我通往 yihui 降价示例的途径,包括这种包含方式:) 提出更有用的评论 --- 虽然接受的答案涉及重用 数据对象,但这是重用代码的一种好方法,仅包括其他文件的一部分。对我来说,我已经开始开发具有可重用功能的库文件,并且只将相关的文件放在笔记本中 - 以这种可重用的方式 - 非常有帮助。
【解决方案2】:

很多时候,我有很多报告需要运行带有略微不同参数的相同代码。分别调用我所有的“统计”函数,生成结果然后只是引用是我通常做的。这样做的方法如下:

---
title: "Untitled"
author: "Author"
date: "August 4, 2015"
output: html_document
---

```{r, echo=FALSE, message=FALSE}
directoryPath <- "rawPath" ##Something like /Users/userid/RDataFile
fullPath <- file.path(directoryPath,"myROutputFile.RData") 
load(fullPath)
```

Some Text, headers whatever

```{r}
summary(myStructure$value1) #Where myStructure was saved to the .RData file
```  

您可以使用save.image() 命令保存 RData 文件。

希望有帮助!

【讨论】:

  • 这不仅是一个解决方案,也是一个学习更多 R 知识的课程。谢谢!
  • 我不确定这是否符合 R markdown 的“精神”。从它的网站:“R Markdown 文档是完全可重现的”——我认为这是暗示它是一个没有外部依赖的独立文档。 1)我可能是错的,2)如果它做你想要的,也许精神并不重要。想法?
  • 如果您的 .RData 是由脚本生成的,那么您可以获取文件而不是加载。我的许多脚本需要几个小时才能加载,因此在 R Markdown 中不断“编译”它们是站不住脚的。
  • @kevinsa5 如果您以上传的任何格式包含 R 脚本,我看不出有什么问题。正如 user137015 所指出的,我们中的许多人都有需要永远运行的项目,而 RMarkdown 缓存只能到此为止。我通常使用:for( f in dir( intdir, pattern = "FinalResults", full.names=TRUE ) ) { load( f ) } 用于更大的项目,然后使用save 一路走来。
  • @user1357015 和 Ari,好点子。谢谢你的解释。
猜你喜欢
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 2021-06-22
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
相关资源
最近更新 更多