2016-11-29 3 views
-2

Ich denke, dies ist eine sehr einfache Frage, aber ich verstehe nicht, warum meine Schleife springt nicht:Schleife für Matrix springt nicht R

Ich habe eine vorgefüllter Matrix:

0  1  2 3 ... 22 
1 1/22 1/22 1/22 1/22 .. 1/22 
2 1/22 1/22 1/22 1/22.. 
3 1/22 
.. 
22 1/22..   .. 1/22 

und jetzt will ich eine Matrix haben, wo der Spaltenname für die erste Anzahl von Zeilen steht, wo es noch ein 1/22 drin ist, und ersetzen sie den Rest mit 1/25:

0  1  2 3 ... 22 
1 1/22 1/22 1/22 1/22 .. 1/22 
2 1/22 1/25 1/22 1/22.. 
3 1/22 1/25 1/25 1/22 
..1/22 1/25 1/25 1/25 
22 1/22..   .. 1/22 

ich diesen Code schrieb das soll weiter von Spalte zwei, aber es füllt nur die erste Zeile aus?

for(i in 2:nrow(Matrix22)){ 
for(j in 2:ncol(Matrix22)){ 
Matrix22[i:22,j] <- 1/25 
} 
} 
+1

Warum nicht einfach: 'Matrix22 [lower.tri (Matrix22, TRUE)] <- 1/25; Matrix22 [, 1] <- 1/22' Füllen Sie das untere Dreieck und setzen Sie die erste Spalte danach zurück. – Tensibai

+0

Vielen Dank @Tensibai :) – Max

Antwort

0

Die Lösung von Tensibai ist auf jeden Fall in diesem Beispiel besser, aber Ihre ursprünglichen für Loop-Lösung zu beheben Sie die folgenden

Matrix22<-matrix(rep(1/22,484),nrow=22,ncol=22) 

for(j in 2:ncol(Matrix22)){ 
     Matrix22[j:nrow(Matrix22),j] <- 1/25 
} 

auch tun können, wie Sie die verschachtelte for-Schleifen waren nicht notwendig, sehen da die Spaltennummer die Startzeile bestimmt, in der Zahlen geändert werden müssen.

+0

Danke @Niek :) – Max