如果可能,請在外部參數文件中設置不同的sets/runs/experiments參數。然後,您可以獲取代碼,調用一個函數,甚至可以使用一個包,但操作由一小組外部定義的參數確定。
例如,JSON對此非常有效,RJSONIO
和rjson
包允許您將文件加載到列表中。假設你將它加載到名爲parametersNN.json的列表中。一個例子如下:
{
"Version": "20110701a",
"Initialization":
{
"indices": [1,2,3,4,5,6,7,8,9,10],
"step_size": 0.05
},
"Stopping":
{
"tolerance": 0.01,
"iterations": 100
}
}
保存,作爲 「parameters01.json」 和負載爲:
library(RJSONIO)
Params <- fromJSON("parameters.json")
,你是關閉和運行。 (注意:我喜歡在我的參數文件中使用唯一的版本#,以便稍後可以識別集合,如果我正在查看R中的「參數」列表)。只需調用腳本並指向參數文件,例如:
Rscript --vanilla MyScript.R parameters01.json
然後,在程序內,識別所述參數從commandArgs()
功能文件。
稍後,您可以將代碼分解爲函數和包,但這可能是在短期內使vanilla腳本具有通用性的最簡單方法,並且它是長期的良好實踐,因爲代碼應該是分離的來自運行/數據集/實驗相關參數的規範。
編輯:更確切地說,我甚至會在JSON中指定輸入和輸出目錄或文件(或命名模式/前綴)。這很清楚一組參數如何導致一個特定的輸出集合。它們之間的所有內容都只是運行給定參數化的代碼,但代碼應該不會真的發生太大的變化,應該如何?
更新: 三個月,成千上萬的跑步,比我以前的答案懂事了,我想說的是,在JSON參數外部存儲是1-1000不同的運行非常有用。當參數或配置數量在千位及以上時,最好切換到使用數據庫進行配置管理。每種配置都可能源於JSON(或XML),但能夠應對不同的參數佈局需要更大規模的解決方案,對此類數據庫像SQLite(通過RSQLite
)是一個很好的解決方案。我意識到這個答案對於原始問題是過度的 - 如何重複工作只需幾次,只需要進行一些參數修改,但是當在正在進行的研究中擴展數百或數千參數變化時,更多的工具是必要。 :)
+1因爲你只會再做兩次。答案還取決於你每次通過分析會有多少變化 - 只有幾個參數,輸入數據,?我發現(1)拉出關鍵參數並在代碼的頂部定義它們[或者將它們放在單獨的文件中,並將'source()'分析主體]和(2)在一個函數中包裝代碼的主體。我不清楚你的父母對功能環境的區別在哪裏。 –
+1這是我最後做的。我將每次運行更改的所有參數都包裝到列表中。然後創建包含每次運行的輸入值的不同列表(具有相同的結構)。對於每次迭代,我複製必要的列表並將結果變量保存到輸出列表中。換句話說,將代碼封裝成序言和清理,並完成工作。有用。沒關係,如果它很醜陋... – Andrie