Erstens ist diese Frager: die Verwaltung von Speicherzuweisung in Schleifen
NICHT überError: cannot allocate vector of size n
ich diesen Fehler akzeptieren als gegeben und ich versuche, den Fehler im Code zu vermeiden
Ich habe ein Datensatz von 3000+ Variablen und 120000 Fälle
Alle Spalten sind numerisch
Ich muss NA mit Null zurücksetzen
Wenn ich Werte für 0 für den gesamten Datensatz neu zuweisen, erhalte ich den Speicher Zuordnungsfehler.
So bin Neuzuweisung ich die Werte auf Null einer Spalte zu einem Zeitpunkt: `
resetNA <- function(results) { for (i in 1:ncol(results)) { if(i>10) { results[,i][is.na(results[,i])] <- 0 } } print(head(results)) }
Nach etwa 1000 Spalten, bekomme ich immer noch die Speicherzuordnungsfehler.
Nun scheint mir das seltsam. Irgendwie erhöht sich die Speicherzuweisung nach jeder Schleife. Ich sehe jedoch nicht, warum dies der Fall sein würde.
Auch versuchte ich Garbage Collection-Funktion nach jeder Schleife aufrufen, ich habe immer noch die Speicherzuweisung Fehler.
Kann mir jemand erklären, wie ich die Variablen verwalten kann, um die schrittweise Erhöhung der Speicherzuweisung zu vermeiden (schließlich hat sich die Datenrahmengröße nicht geändert).
teilen Sie Ihre Daten in Listen, gelten die Funktion auf die Listen, dann –
Dank rekombinieren, ich werde es versuchen. Aber können Sie erklären, warum diese Schleife eine inkrementelle Speicherzuweisung verursacht? – Jake
auch, bitte zögern Sie nicht, die Antwort zu posten, und ich werde upvote. Ich hasse es, Antworten auf meine eigenen Fragen zu veröffentlichen, aber hasse es, eine Frage noch unbeantwortet zu lassen. – Jake