2015-01-14 3 views
0

겉으로보기에는 초보적인 질문이지만 몇 가지 옵션을 검색하여 시도했지만 출력이 나타나지 않습니다.다른 길이의 루프 출력 반복 및 저장

필자는 다음과 같은 결과 (아래 dput)의 열을 가지고 있으며 끝까지 끝까지 모든 요소로 시작하는 루프에서 이들을 합성합니다. 출력을 "results"에 저장하고 싶습니다. 미리 초기화했습니다. 아래에서 볼 수 있듯이 결과에 결과를 표시하는 여러 방법을 시도했지만 어느 것도 성공하지 못했습니다. 그러나 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") 
+1

동일한 질문을 두 번 묻는 이유는 무엇입니까? 이전 질문과의 차이점은 무엇입니까? – agstudy

+0

차이점은 내가 특별히 for 루프에 대한 반복 출력을 저장하는 데 문제가 있다는 것입니다. –

+3

출력에 'list'를 사용하지 않는 이유는'res <- lapply (seq_len (nrow (returns)), function i) cumprod (1 + return [i : nrow (returns),]/100) -1)' –

답변

0

, 두 번째는 두 번째로 혼합 처음이다 , 등등. 그리고 각 줄에서, 당신은 한 번 더 나간다. 그렇다면, 나는 다음 당신을 위해 작동합니다 생각 :

> 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 

당신은 할 수 있습니다 : 데이터가 긴 사용

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 %의 수익률의 순서를 제공, 당신은 뭔가를 얻을 memoization을 사용하면 더욱 효율적입니다.

+0

고맙습니다.이 방법을 시도해 보겠습니다. –