R / Sweave 参数

Posted

技术标签:

【中文标题】R / Sweave 参数【英文标题】:R / Sweave arguments 【发布时间】:2012-03-13 01:20:49 【问题描述】:

我正在使用 R 和 Sweave 生成​​报告。

R CMD Sweave MyReport.Rnw

我希望能够向 R 代码发送参数,因为报告当然是“动态”。所以,我希望能够执行以下操作:

R CMD SWeave MyReport.Rnw PatientId=5

...让 R 代码读取变量中的 PatientId 值...

我该怎么做?有人提到使用环境变量,但这似乎是一个不优雅的解决方案。

【问题讨论】:

【参考方案1】:

要获取从 R 命令行传递的参数,您可以使用函数 commandArgs(),但不幸的是 R CMD Sweave 不支持额外的命令行选项。但是,您仍然可以通过R -e 致电 Sweave,例如

R -e "Sweave('MyReport.Rnw')" --args PatientId=1

MyReport.Rnw 中,您对commandArgs(TRUE) 进行一些文本处理,在这种情况下会为您提供字符串PatientId=1

但我认为更好的做法是在 R 脚本中直接使用函数Sweave();例如在这种情况下,您可以在

之类的脚本中编写流程
PatientId <- 1
Sweave("MyReport.Rnw")

MyReport.Rnw 中,您直接使用全局变量PatientId。如果你想生成一系列报告,你甚至可以使用PatientId的循环。

【讨论】:

【参考方案2】:

您需要“写入”可以“读取”的值:

如上所述,环境变量是sys.getenv() 的一种简单方法

您可以读取的配置或数据文件

数据库存储

etc pp. 回想一下,R 代码确实是执行,所以你总是可以分两步进行:

rScriptOne.r                   # write to foo.txt
R CMD Sweave MyReport.Rnw      # reads from foo.txt

【讨论】:

我经常不喜欢使用环境变量,我认为这在可重复性研究中不是一个好习惯,因为环境变量通常特定于一个单一的系统。 它们也不是我最喜欢的,但 R 例如在幕后使用它们一公吨,并且在不同的平台和系统上成功地这样做了。

以上是关于R / Sweave 参数的主要内容,如果未能解决你的问题,请参考以下文章

编程R / Sweave以获得正确的 Sexpr输出

如何在R / Sweave中的Sexpr中使用%in%? [重复]

Sweave中的xtable:指定表格+对齐中的toprule或midrule

R语言编程时如何传递文件名参数

R---plot()参数详解

R /用科学计数法用 Sexpr {}格式化数字