Ich habe eine große Matrix (500-Reihe von 30000-Spalte) von Nullen und Einsen. Dazu habe ich Zeile 501 mit Werten zwischen 0 und 1 angehängt. Wenn der Wert in Zeile 501 für Spalte x> 0,5 ist, möchte ich alle Nullen durch Einsen und alle Einsen durch Nullen in dieser Spalte ersetzen. Ich habe den Code unten implementiert:Wie ersetzt man Elemente in bestimmten Spalten einer Matrix?
for(x in 1:30000){
if (matrix[501,x] > 0.5){
for(y in 1:500){
matrix[matrix[y,x]==1] <- 0
matrix[matrix[y,x]==0] <- 1
}
}
}
matrix
Dieser Code läuft kontinuierlich, und ich habe vor dem Anhalten es so lange wie 2 Stunden weg, so dass ich nicht eine Fehlermeldung zu berichten. Wie kann ich das aufräumen? Was mache ich falsch?
Sie O (n^2) -Algorithmus verwenden, zusätzlich ist Schleife sehr langsam in r. Lesen Sie diesen Artikel http://bigocheatsheet.com/. Dies gibt Ihnen einen Einblick, wie Sie Ihren Code umschreiben können. –
Beachten Sie auch, dass Ihre erste Ersatzlinie durch Ihre zweite Ersatzlinie rückgängig gemacht wird. – lmo
Danke lmo und Kppatel. Hätte nicht gedacht, dass ich vielleicht in einer Ersatzschleife stecke. – Dirigible