将循环的输出分配给列表

时间:2014-07-30 07:41:59

标签: r list for-loop

这可能是一个奇怪的问题,但是... ...

我有3个载体:

myseq=seq(8,22,1) 
myseqema3=seq(3,4,1)
myseqema15=seq(10,20,1)

我想将结果分配到我的列表中:

SLResultsloop=vector(mode="list")

有了这个循环:

for (i in myseq){
  for(j in myseqema3){
    for( k in myseqema15){
  SLResultsloop[[i-7]]= StopLoss(data=mydata,n=i,EMA3=j,EMA15=k)
  names(SLResultsloop[[i-7]])=rep(paste("RSI=",i,"EMA3=",j,"EMA15=",k,sep="|"),
  length=length(SLResultsloop[[i-7]]))

}
}
}

问题如下:the loop above overrides the list elements. So does any one have a clever solution about how to assign the loopresults to unique list elements (without overriding previous results)?

一种解决方案可能是将输出分配给不同的列表,但这有点难看......

最好的问候

1 个答案:

答案 0 :(得分:1)

您可以使用expand.gridapply(或类似内容)完全跳过循环:

g <-
expand.grid(myseq = myseq,
            myseqema3 = myseqema3,
            myseqema15 = myseqema15)

apply(g, 1, function(a) {
    StopLoss(data=mydata, n=a[1], EMA3=a[2], EMA15=a[3])

})

然后,您可以使用以下内容为apply的返回值的每个元素构建名称:

paste("RSI=",g[,1], "EMA3=", g[,2],"EMA15=", g[,3], sep="|")