2012-02-22 74 views
5

我正在使用R和Sweave生成报告。R/Sweave参数

[R CMD Sweave MyReport.Rnw

我希望能够发送参数到R代码,因为该报告,当然,“动态”。所以,我想能够做到这样的事情:

[R CMD SWeave MyReport.Rnw PatientId = 5

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

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

回答

5

摆脱R指令行传递的参数,你可以使用函数commandArgs(),但不幸的是R CMD Sweave不支持额外的命令行选项。但是,您仍然可以拨打R -e,例如

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的循环。

1

你需要“写”在那里可以“读”的价值:

  • 环境变量,如前所述,与sys.getenv()

  • 配置或数据文件,一个简单的方法,您可以读

  • 数据的基础上存储

等PP回想一下,R代码里面真的是执行让你随时可以做两步:

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

我经常对使用环境变量不满意,因为环境变量通常只针对单个系统,所以我认为这不是一种可重复研究的好做法。 – 2012-02-22 21:46:26

+0

他们并不是我最喜欢的,但R例如在幕后使用它们一公吨,并且在差异平台和系统上成功完成。 – 2012-02-22 22:20:19