我试图用一些变量来改变它们在一个范围内的值,有没有比为它们每一个创建一个循环更简单的方法?
这曾经是我在C ++上的代码(当然循环是由另一个脚本生成的,所以我可以更快地工作)
int SMA = 9; //extern
double buyLotSize = .01; //extern
double sellLotSize = .01; //extern
int buySpreadMargin = 0; //extern
double minEquity=.6; //extern
int maxRisk=3000; //extern
int FastMAPeriod = 12; //extern
int SlowMAPeriod = 26; //extern
double Lot=.01; //extern
double lotLimit=.07; //extern
for(int SMA=3; SMA<33; SMA+=3)
for(double buyLotSize=0; buyLotSize<6; buyLotSize+=0.3)
for(double sellLotSize=0; sellLotSize<6; sellLotSize+=0.3)
for(int buySpreadMargin=0; buySpreadMargin<6; buySpreadMargin+=0.3)
for(double minEquity=0; minEquity<6; minEquity+=0.3)
for(int maxRisk=3000; maxRisk<60000; maxRisk+=3000)
for(int FastMAPeriod=3; FastMAPeriod<33; FastMAPeriod+=3)
for(int SlowMAPeriod=3; SlowMAPeriod<33; SlowMAPeriod+=3)
for(double Lot=0; Lot<6; Lot+=0.3)
for(double lotLimit=0; lotLimit<6; lotLimit+=0.3)
{ sim[nsim].SMA=SMA;
sim[nsim].buyLotSize=buyLotSize;
sim[nsim].sellLotSize=sellLotSize;
sim[nsim].buySpreadMargin=buySpreadMargin;
sim[nsim].minEquity=minEquity;
sim[nsim].maxRisk=maxRisk;
sim[nsim].FastMAPeriod=FastMAPeriod;
sim[nsim].SlowMAPeriod=SlowMAPeriod;
sim[nsim].Lot=Lot;
sim[nsim].lotLimit=lotLimit;
sim[nsim].dosomething() //start simulation
...
我的计划是创建一个包含每个变量值和范围的列表,但我仍然对语言太新了,我无法想出另一种方法来使用所有组合而不重新编写相同的循环,这样的事情会做诀窍,我认为这种任务在R中会更简单,但我不确定,我还没找到我要找的东西。
var1$range=range(min=0,max=3,step=.2)
var2$range=range(min=3,max=30,step=3)
for comb(var1,var2,...)
dosomething(var1$value, var2$value) //simulation
答案 0 :(得分:2)
expand.grid
将返回包含输入值的所有组合的数据框。您可以编写一个处理数据帧行的函数。
a <- seq(0, 1, 0.2)
b <- seq(0, 1, 0.5)
df <- expand.grid(a = a, b = b)
do_something <- function(a, b){
#do something
a + b
}
df$c <- do_something(df$a, df$b)
df
a b c
1 0.0 0.0 0.0
2 0.2 0.0 0.2
3 0.4 0.0 0.4
4 0.6 0.0 0.6
5 0.8 0.0 0.8
6 1.0 0.0 1.0
7 0.0 0.5 0.5
8 0.2 0.5 0.7
9 0.4 0.5 0.9
10 0.6 0.5 1.1
11 0.8 0.5 1.3
12 1.0 0.5 1.5
13 0.0 1.0 1.0
14 0.2 1.0 1.2
15 0.4 1.0 1.4
16 0.6 1.0 1.6
17 0.8 1.0 1.8
18 1.0 1.0 2.0