迭代并保存不同长度的循环输出

时间:2015-01-14 18:38:31

标签: r loops plyr

看似基本的问题,但我已经搜索并尝试了几个选项,但无法显示输出。我非常感谢下面的帮助:

我有一列返回(下面的输入),我将它们组合在一个循环中,从每个元素开始一直到最后。我想将输出保存在"结果"中,我事先已经初始化了。我尝试了几种将输出放入结果的方法,如下所示,但没有一种是成功的。但是,我看到print(temp)计算正在发生,因为我喜欢它们。

然而,每次迭代产生不同长度的答案,并且我希望每个迭代都在它自己的行中(这就是为什么我在向量中增加了额外空间的原因)。使用当前方法:results = resultstemp不成功,因为" extra"除了第一次迭代之外的所有列都填充了结果开头的重复。因此,例如,倒数第二行具有相同的两个数字(仅两个返回的复合的完整结果)在整个行中重复12次。

    #results=NULL
    results=matrix(data=NA,nrow=nrow(returns),ncol=nrow(returns))
    for (i in 1:nrow(returns)) {
      temp=cumprod(1+returns[i:nrow(returns),]/100)-1
      #resultstemp=append(results,temp)
      #resultstemp[i,]=temp
      resultstemp=rbind(results,temp)
      #print(resultstemp)
      print(temp)
      results=resultstemp
      #resultstemp[i,]=temp
      #results[i,]=resultstemp
      #results[i]=resultstemp[i]
      #results[i]=temp[i]
    }

返回:

structure(list(`runif(24, 0, 10)` = c(7.60884596500546, 4.31712970370427, 
1.7181678651832, 4.86275367671624, 8.06177110411227, 8.07952171890065, 
7.45263583026826, 9.86292108893394, 4.06634262995794, 2.36454397207126, 
9.12716506049037, 3.72667369898409, 1.2204843852669, 7.80610600719228, 
0.640116988215595, 6.94793848553672, 1.73743493855, 2.57189674302936, 
4.7653386532329, 1.79362375289202, 7.56623527035117, 2.70907687023282, 
4.45359382545575, 5.50409059040248)), .Names = "runif(24, 0, 10)", row.names = c(NA, 
-24L), class = "data.frame")

1 个答案:

答案 0 :(得分:0)

如果我理解正确的话,你需要像下三角矩阵这样的东西,第一列只是第一个百分比,第二个是第一个与第二个混合,等等。在每一行中,你再出一个期?如果是这样,我认为以下内容适用于您:

CMPND <- function(X){
  n <- length(X)
  OUTPUT <- matrix(NA, nrow = n, ncol = n)
  for (i in seq_len(n)){
    OUTPUT[i, 1] = X[1] / 100
    for (j in seq_len(i - 1) + 1) {
      OUTPUT[i, j] = ((1 + OUTPUT[i, j - 1]) * (1 + X[j] / 100)) - 1
    }
  }
  return(OUTPUT)
}

使用你的数据很长,但是给出一系列5%10%的回报,你会得到类似的结果:

> CMPND(rep(.1, 5))
      [,1]     [,2]        [,3]        [,4]       [,5]
[1,] 0.001       NA          NA          NA         NA
[2,] 0.001 0.002001          NA          NA         NA
[3,] 0.001 0.002001 0.003003001          NA         NA
[4,] 0.001 0.002001 0.003003001 0.004006004         NA
[5,] 0.001 0.002001 0.003003001 0.004006004 0.00501001

您可以使用memoization提高效率,我确定。