2017-06-12 5 views
0

Ich unterrichte mich selbst, indem ich einige Aufgaben in meiner Monte-Carlo-Klasse re-mache. Ich baute einen RANDU-Generator in R, und ich bin für alle Triplets in der Sequenz zuständig (u_i, u_ {i + 1}, u_ {i + 2}), wobei 0,5 < = u_ {i + 1} < = 0,51 , plot u_i gegen u_ {i + 2}.Streudiagramm in R

Ich habe folgendes in MATLAB während der Klasse und ich bekomme diese:

enter image description here

Hier ist der Code, den ich in Latex schrieb, beachten Sie nur, dass die in der Variablen gespeicherten Daten u einfach einheitliche Zufallszahlen zwischen 0 und 1.

enter image description here

Nun zu meiner Frage, bekomme ich diesen Fehler in R

Error in if (0.5 <= u[i + 1] & u[i + 1] <= 0.51) { : 
    missing value where TRUE/FALSE needed 

Ich bin nicht sicher, was das Problem ist hier, hier ist meine volle R-Code:

n = 20002 
x <- 1:n 
x[1] = 1 

for(i in 2:n){ 
    x[i] = (65539*x[i-1]) %% 2^31 
} 

u <- 1:n 
u[1] = 1/(2^31) 
for(i in 2:n){ 
    u[i] = x[i]/(2^31) 
} 


for(i in 1:length(u)){ 
    if(0.5 <= u[i+1] & u[i+1] <= 0.51){ 
    plot(u[i],u[i+2]) 
    } 
} 

Irgendwelche Vorschläge sehr geschätzt werden.

+0

Das Argument '0,5 <= u [i + 1] & u [i + 1] <= 0,51 'sieht seltsam aus. Wie kann derselbe Wert 'u [i + 1] 'kleiner oder gleich 0,51 und mehr als oder gleich 0,51 gleichzeitig sein? –

+0

Ich denke, das Problem hier ist wegen 'NA' Werte. Sie versuchen, 'u [i + 1]' zu indizieren, was dazu führt, dass NA für einen Wert zurückgegeben wird (wenn 'i = Länge (u)'). Der gleiche Fall tritt auf, wenn Sie versuchen, 'u [i + 2]' zu zeichnen. Versuchen Sie, Ihre Indizierung zu ändern und zu überprüfen, ob sie funktioniert. – fzk

Antwort

1

Ich denke, das Problem ist für Ihre letzte Beobachtung in u. Wie für Ihre for Schleife, die Sie bitten, u[i+1] auszuwerten. Versuchen Sie dies:

for(i in 1:length(u)-1){ 
    if(0.5 <= u[i+1] & u[i+1] <= 0.51){ 
    plot(u[i],u[i+2]) 
    } 
} 
+0

Fehler in if (0.5 <= u [i + 1] & u [i + 1] <= 0.51) {: Argument ist von der Länge Null – Wolfy

+0

Versuchen Sie es jetzt. Tippfehler! – Bram