2012-02-22 111 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