簡體   English   中英

循環並保存不同長度的循環輸出[重復]

[英]Iterate and save loop outputs of different lengths [duplicate]

該問題與以下內容完全相同:

看似基本的問題,但我已經搜索並嘗試了幾個選項,但無法顯示輸出。 我非常感謝以下幫助:

我有一列返回值(在下面是dput),我將它們復合在一個循環中,從每個元素一直到結束。 我想將輸出保存在“結果”中,並預先對其進行了初始化。 我嘗試了幾種將輸出轉換為結果的方法,如下所示,但沒有一種成功。 但是,我通過print(temp)看到計算正在按我的意願進行。

但是,每次迭代都會產生不同長度的答案,我希望每個迭代都在自己的行中(這就是為什么我在向量中留出了更多NA的空間的原因)。 使用當前方法:results = resultstemp不成功,因為除第一個迭代外,所有“額外”列都填充了結果開始的重復。 因此,例如,倒數第二行具有相同的兩個數字(僅對兩個收益進行復合的完整結果)在整行中重復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")

如果我對您的理解正確,那么您將需要一個較低的三角矩陣,其中第一列只是第一百分比,第二列是第一百分比與第二百分比的乘積,依此類推。等等,在每一行中,您又走了一個周期? 如果是這樣,我認為以下將為您工作:

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

我敢肯定,您可以使用備忘錄來提高效率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM