我通常有一个主R标记文件或knitr LaTeX文件,其中我有一些其他R文件(例如,用于数据处理).然而,我认为在某些情况下,让这些源文件成为它们自己的可复制文件(例如,一个R标记文件,它不仅包含数据处理命令,而且还生成一个解释数据处理决策的可复制文件)是有益的.

因此,我希望在我的主R标记文件中有一个类似于source('myfile.rmd')的命令.这将提取myfile.rmd的R代码块中的所有R代码并将其源代码.当然,这会导致错误.

以下命令有效:

```{r message=FALSE, results='hide'}
knit('myfile.rmd', tangle=TRUE)
source('myfile.R')
```

其中,如果需要输出,可以省略results='hide'.也就是说,knitr将R代码从myfile.rmd输出到myfile.R.

然而,它似乎并不完美:

  • 它会导致创建一个额外的文件
  • 如果需要控制显示,它需要出现在自己的代码块中.
  • 它不像简单的source(...)那么优雅.

因此,我的问题是:

推荐答案

看来你在找一艘客轮.把这个放进你的.Rprofile美元怎么样?

ksource <- function(x, ...) {
  library(knitr)
  source(purl(x, output = tempfile()), ...)
}

然而,我不明白你为什么要在Rmd文件中添加代码.我的意思是knit()将运行本文档中的所有代码,如果您提取代码并在一个块中运行,那么当您knit()本文档时,所有代码将运行两次(您在自己内部运行).这两项任务应该是分开的.

如果你真的想运行所有的代码,RStudio已经让它变得相当简单:Ctrl + Shift + R.它基本上在幕后调用purl()source().

R相关问答推荐

R中的Fasttext langue_identification返回太多参数-如何与文本匹配?

逐行替代引用前一行的for循环

我可以截断10字节的扩展数并转换为8字节的double吗?

高质量地将R格式的图表从Word中输出

为什么以及如何修复Mapview不显示所有点并且st_buffer合并一些区域R?

使用ggcorrplot在相关性矩阵上标注supertitle和index标签

将非重复序列高效转换为长格式

如何将移除事件分配给动态创建的按钮?

在R中使用数据集名称

如何在ggplot中标记qqplot上的点?

如何优化向量的以下条件赋值?

如何使用列表中多个列表中的第一条记录创建数据框

TreeNode打印 twig 并为其上色

有没有一种方法可以同时对rhandsontable进行排序和从rhandsontable中删除?

如何在R中使用hmm TMB提前一步预测观察到的状态?

防止在更新SHINY中的Reactive Value的部分内容时触发依赖事件

ggplot R:X,Y,Z使用固定/等距的X,Y坐标绘制六边形热图

如何将宽格式的患者信息数据高效地转换为患者计数的时间序列?

禁用时,SelecizeInput将变得不透明

策略表单连接两个非常大的箭头数据集,而不会 destruct 内存使用