Dies ist etwas, was Datenanalytiker die ganze Zeit tun (besonders wenn sie mit Umfragedaten arbeiten, die fehlende Antworten aufweisen.) Es ist üblich, zuerst eine Menge konkurrierender Datenmatrizen zu multiplizieren, Modelle an jede dieser Matrizen anzupassen und dann zu kombinieren die Ergebnisse. Im Moment mache ich Dinge von Hand und suche eine elegantere Lösung.
Stellen Sie sich vor, es gibt 5 *.csv
Dateien im Arbeitsverzeichnis namens dat1.csv
, dat2.csv
, ... dat5.csv
. Ich möchte das gleiche lineare Modell mit jedem Datensatz schätzen.
Wenn diese Antwort gegeben wird, besteht ein erster Schritt darin, eine Liste der Dateien zu sammeln , was ich mit folgendem mache:
%Vor%Jetzt möchte ich etwas wie
machen %Vor% Die "which" -Anweisung ist meine alberne Art, zu versuchen, jedes Modell der Reihe nach zu nummerieren, indem ich den Ort in der csvdat-Liste verwende, den die Schleife gerade belegt. das heißt, ich möchte, dass diese Schleife einen Satz von 5 lm-Objekten mit den Namen lm.1
, lm.2
usw. zurückgibt.
Gibt es eine einfache Möglichkeit, diese Objekte zu erstellen und sie so zu benennen, dass ich leicht angeben kann, welchem Datensatz sie entsprechen?
Danke für Ihre Hilfe!
Was Sie wollen, ist eine Kombination der Funktionen seq_along()
und assign()
seq_along
hilft bei der Erstellung eines Vektors von 1 bis 5, wenn fünf Objekte in csvdat
vorhanden sind (um die entsprechenden Zahlen und nicht nur die Variablennamen zu erhalten). Dann assign
(mit paste
, um die passenden astrings aus den Zahlen zu erstellen) können Sie die Variable erstellen.
Beachten Sie, dass Sie auch zuerst die Datendatei laden müssen (in Ihrem Beispiel fehlte):
%Vor% seq_along
ist nicht unbedingt notwendig, es könnte andere Wege geben, das Nummerierungsproblem zu lösen.
Die kritische Funktion ist assign
. Mit assign können Sie Variablen mit einem Namen basierend auf einer Zeichenfolge erstellen. Siehe ?assign
für weitere Informationen.
Nach den Kommentaren von chl (siehe seinen Beitrag) alles in einer Zeile:
%Vor%Tags und Links r