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中使用%in%? [重复]