我正在使用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