这可能是一个奇怪的问题,但是... ...
我有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)?
一种解决方案可能是将输出分配给不同的列表,但这有点难看......
最好的问候
答案 0 :(得分:1)
您可以使用expand.grid
和apply
(或类似内容)完全跳过循环:
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="|")