我正在使用R和Sweave生成报告。R/Sweave参数
[R CMD Sweave MyReport.Rnw
我希望能够发送参数到R代码,因为该报告,当然,“动态”。所以,我想能够做到这样的事情:
[R CMD SWeave MyReport.Rnw PatientId = 5
...并使R代码读取变量中的PatientId
值...
我该如何做?有人提到使用环境变量,但这似乎是一个非优雅的解决方案。
我正在使用R和Sweave生成报告。R/Sweave参数
[R CMD Sweave MyReport.Rnw
我希望能够发送参数到R代码,因为该报告,当然,“动态”。所以,我想能够做到这样的事情:
[R CMD SWeave MyReport.Rnw PatientId = 5
...并使R代码读取变量中的PatientId
值...
我该如何做?有人提到使用环境变量,但这似乎是一个非优雅的解决方案。
摆脱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
的循环。
你需要“写”在那里可以“读”的价值:
环境变量,如前所述,与sys.getenv()
配置或数据文件,一个简单的方法,您可以读
数据的基础上存储
等PP回想一下,R代码里面真的是执行让你随时可以做两步:
rScriptOne.r # write to foo.txt
R CMD Sweave MyReport.Rnw # reads from foo.txt
我经常对使用环境变量不满意,因为环境变量通常只针对单个系统,所以我认为这不是一种可重复研究的好做法。 – 2012-02-22 21:46:26
他们并不是我最喜欢的,但R例如在幕后使用它们一公吨,并且在差异平台和系统上成功完成。 – 2012-02-22 22:20:19