【问题标题】:Assign output from a loop to a list将循环的输出分配给列表
【发布时间】:2014-07-30 07:41:59
【问题描述】:

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

我有 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)?

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

最好的问候

【问题讨论】:

  • mylist[[i]][[j]][[k]]?那会给你一个嵌套列表。问题是这是否是您数据的最佳结构...
  • @Roland 谢谢,但你有更好的解决方案吗?;)

标签: r list for-loop


【解决方案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="|")

【讨论】:

  • 这确实是一个很棒的解决方案!没想到expand.grid。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
  • 2017-02-09
  • 2017-11-18
  • 1970-01-01
  • 2021-01-23
  • 2021-02-26
  • 2011-09-11
相关资源
最近更新 更多