Loop - Ersatz hat die Länge null
Ich habe ein kleines problem mit einer Schleife. Hier ist der code der Schleife:
for(i in 1:40) {
ret1 <- sample(vec, 40, replace=T)
if (i == 1) {
val[i] = Put[i]*(1+ret1[i])
} else (i > 1)
val[i] = ((val[i-1])+Put[i])*(1+ret1[i])
}
Die Fehlermeldung die ich erhalte ist folgende:
Error in val[i] = ((val[i - 1]) + Put[i]) * (1 + ret1[i]) :
replacement has length zero
Hier ist der input-Daten:
val: is an empty shell to store values in
vec <- c(43.81, -8.3, -25.12, -43.84, -8.64, 49.98, -1.19, 46.74, 31.94,
-35.34, 29.28, -1.1, -10.67, -12.77, 19.17, 25.06, 19.03, 35.82,
-8.43, 5.2, 5.7, 18.3, 30.81, 23.68, 18.15, -1.21, 52.56, 32.6,
7.44, -10.46, 43.72, 12.06, 0.34, 26.64, -8.81, 22.61, 16.42,
12.4, -9.97, 23.8, 10.81, -8.24, 3.56, 14.22, 18.76, -14.31,
-25.9, 37, 23.83, -6.98, 6.51, 18.52, 31.74, -4.7, 20.42, 22.34,
6.15, 31.24, 18.49, 5.81, 16.54, 31.48, -3.06, 30.23, 7.49, 9.97,
1.33, 37.2, 22.68, 33.1, 28.34, 20.89, -9.03, -11.85, -21.97,
28.36, 10.74, 4.83, 15.61, 5.48, -36.55, 25.94, 14.82, 2.07,
15.83)
Put = c(6180, 6365.4, 6556.362, 6753.05286, 6955.6444458, 7164.313779174,
7379.24319254922, 7600.6204883257, 7828.63910297547, 8063.49827606473,
8305.40322434668, 8554.56532107708, 8811.20228070939, 9075.53834913067,
9347.80449960459, 9628.23863459273, 9917.08579363051, 10214.5983674394,
10521.0363184626, 10836.6674080165, 11161.767430257, 11496.6204531647,
11841.5190667596, 12196.7646387624, 12562.6675779253, 12939.5476052631,
13327.7340334209, 13727.5660544236, 14139.3930360563, 14563.574827138,
15000.4820719521, 15450.4965341107, 15914.011430134, 16391.431773038,
16883.1747262292, 17389.669968016, 17911.3600670565, 18448.7008690682,
19002.1618951403, 19572.2267519945)
Was mache ich falsch /nicht verstehen Schleifen?
Dem Ziel, all dies ist zur Berechnung der historischen Rendite bei einer Investition über die Zeit. Ich planen Investitionen X Menge an Geld jedes Jahr, und es gibt eine bestimmte Rendite auf die Investition. Darüber hinaus werden die Investitionen die Investitionen der Compoundierung.
Bitte geben Sie eine reproduzierbare code. Das bedeutet, dass die Daten als gut. Und es würde helfen, wenn Sie erklären, was Sie versuchen zu tun, (in Worten), wie die Leute hier dazu beitragen kann schneller / besser / sicherer Lösungen (das wird auch Ihnen helfen, und andere).
Danke @Arun, dass eine notwendige Beratung!
Danke @Arun, dass eine notwendige Beratung!
else (i > 1)
sollte else if (i > 1)
. Ich denke, dass ist dein problem.
InformationsquelleAutor user1738753 | 2013-06-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier
else (i > 1)
sollteelse if (i > 1)
Im Grunde, als der jetzt
# statement 2
wird ausgeführt, für allei
. Dieelse
Anweisung nimmt keine argument.So, hier
i > 1
ist# do this 3
. Also# statement 2
ist außerhalb die if-else-Bedingung. Und ich werde laufen, um allei
. Aber der Fehler tritt bei der ersten Ausführung, füri = 1
weilval[i-1] = val[0] = numeric(0)
. Undnumeric(0) + Put[i])*(1+ret1[i]) = numeric(0)
wieder. Und du bist die Zuordnung diesernumeric(0)
(element der Länge 0) zu einem element der Länge 1, was nicht möglich ist.Beachten Sie, dass eine
if
- Anweisung kann eineelse
ohneelse if
und wie vieleelse if
Aussage als notwendig und brauchen nicht eineelse
Aussage überhaupt.InformationsquelleAutor Arun