如果可能,请在外部参数文件中设置不同组/运行/实验之间的参数。然后,您可以获取代码、调用函数,甚至使用包,但操作由一小组外部定义的参数决定。
例如,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")
然后你就开始跑步了。 (注意:我喜欢在我的参数文件中使用唯一版本#s,以便我以后可以识别该集合,如果我正在查看 R 中的“参数”列表。)只需调用您的脚本并指向参数文件,例如:
Rscript --vanilla MyScript.R parameters01.json
然后,在程序中,从commandArgs() 函数中识别参数文件。
稍后,您可以将代码分解为函数和包,但这可能是让 vanilla 脚本在短期内通用化的最简单方法,从长远来看,这是一个很好的做法,因为代码应该与运行/数据集/实验相关参数的规范。
编辑:更准确地说,我什至会在 JSON 中指定输入和输出目录或文件(或命名模式/前缀)。这使得一组参数如何导致一个特定的输出集变得非常清楚。两者之间的所有内容都只是使用给定参数化运行的代码,但代码应该不会有太大变化,不是吗?
更新:
三个月,数千次运行,比我之前的回答更明智,我会说 JSON 中参数的外部存储对于 1-1000 次不同的运行很有用。当参数或配置数以千计以上时,最好切换到使用数据库进行配置管理。每个配置都可能源自 JSON(或 XML),但能够处理不同的参数布局需要更大规模的解决方案,SQLite 之类的数据库(通过RSQLite)是一个很好的解决方案。
我意识到这个答案对于最初的问题来说太过分了——如何只重复几次工作,改变一些参数,但是在正在进行的研究中扩大到数百或数千个参数变化时,需要更广泛的工具. :)