2013-03-28 8 views
5

Ich bin ein Stata-Benutzer, der versucht, R zu lernen. Ich habe ein paar lange Ordnerpfade, die ich in meinem Stata-Code als Einheimische gespeichert habe. Ich habe mehrere Dateien in diesen beiden Ordnern, um sie in meiner Analyse zu verwenden. Ich weiß, in R kann ich das Arbeitsverzeichnis jedes Mal ändern, wenn ich auf eine Datei in einem der Ordner verweisen möchte, aber es ist definitiv kein guter Weg, es zu tun. Selbst wenn ich die Ordnerpfade als Strings in R abspeichere, kann ich nicht herausfinden, wie ich auf diese verweisen soll (wie zum Beispiel mit "folder1" in Stata). Ich frage mich, ob der Versuch, Stata-Code Zeile für Zeile in R zu schreiben, nicht der beste Weg ist, R zu lernen. Kann mir bitte jemand helfen?R Äquivalent von lokalen oder globalen Stata-Makros

+0

Ich glaube, du suchst nach 'list.files (.)'. Schauen Sie [** hier **] (http://stackoverflow.com/questions/5758084/loop-in-r-loading-files/5758134#5758134). Überprüfen Sie auch "? List.files" für alle möglichen Optionen. – Arun

+1

"Selbst wenn ich die Ordnerpfade als Strings in R abspeichere, kann ich nicht herausfinden, wie man auf diese verweist (wie in Stata mit' folder1 '). " Können Sie ein konkretes Beispiel für dieses Problem mit Code geben? – joran

+0

@joran Ordner1 ist der Name der Variablen. Wenn Sie ihn mit einem Häkchen/Häkchen umgeben, wird der Name aufgelöst und der Wert zurückgegeben. Wenn ich über Stata nachdenke, bekomme ich Albträume ... –

Antwort

6

Zuerst als ehemaliger Benutzer Stata, lassen Sie mich R for Stata Users empfehlen. Es gibt auch diesen Artikel auf Macros in R. Ich denke @Nick Cox ist richtig, dass du lernen musst, die Dinge anders zu machen. Aber wie du (zumindest in diesem Fall) finde ich oft eine neue Aufgabe mit meinem Vorwissen, wie ich es in Stata mache und von dort aus gehe. Manchmal finde ich, dass die Ansätze ähnlich sind. Manchmal kann ich R wie Stata wirken lassen, wenn ein anderer Ansatz besser wäre (z. B. loops vs. vectorization).

Ich bin mir nicht sicher, ob ich Ihre Frage mit dem folgenden erfassen werde, aber lassen Sie mich es versuchen.

In Stata, wäre es üblich sein, zu schreiben:

global mydata "path to my data directory/" 

die Daten zu importieren, würde ich nur geben:

insheet using "${mydata}myfile.csv" 

Als ehemaliger Benutzer Stata, möchte ich etwas Ähnliches tun Hier in R. ist, was ich tue:

mydata <- "path to my data directory/" 

in eine cSV-Datei in diesem Verzeichnis zu importieren und einen Datenrahmen erstellen cal led myfile, würde ich verwenden:

myfile <- read.csv(paste(mydata, "myfile.csv", sep="")) 

oder effizienter ...

Ich bin noch kein sehr effizienter R-Benutzer, also werden vielleicht andere Fehler in diesem Ansatz sehen.

+1

Stata ruft Abruf einer benannten Zeichenfolge (d. H. Zeichenvektor) ein "Makro" auf? –

+1

Es ist ein Beispiel für die Verwendung eines globalen Makros. siehe [hier] (http://data.princeton.edu/stata/programming.aspx). Es gibt viel mehr interessante Anwendungen. –

+1

Ah. Mein Eindruck ist, dass R Listenstrukturen mehr als Stata verwendet. Es gibt eine Funktion, die ich hauptsächlich in Gittergraphiken mit dem Namen 'modifyList' verwendet habe, die ähnliche Anwendungen ermöglichen könnte. Es gibt auch Ausdrücke und die "Ersatz" -Funktion in der Sprachmanipulationsdomäne, die benötigt wird, um etwas wie diese Funktionalität zu erhalten. Es scheint, dass die Stata annehmen, dass sie geordnete Textargumente ohne so viele Trennzeichen erhält, während R einen größeren Grad der Trennung von Zeichenvektoren von tatsächlichen Sprachelementen hat. –

5

Vielleicht möchten Sie file.path()?

a <- "c:" 
b <- "users" 
c <- "charles" 
d <- "desktop" 

setwd(file.path(a,b,c,d)) 
getwd() 
#---- 
[1] "c:/users/charles/desktop" 

können Sie wickeln source oder read.XXX oder was auch immer um das zu tun, was Sie wollen.

+0

Danke @Chase. Das beantwortet meine Frage. – user2012406

+0

@ user2012406 Ich bin froh, dass Sie eine Antwort bekommen haben, die Ihr Problem gelöst hat! Es hilft, die Qualität der Website zu verbessern, wenn Sie dies angeben, indem Sie auf das Häkchen in der Antwort klicken, die Ihr Problem gelöst hat. (Sie sind niemals verpflichtet, dies zu tun, aber es hilft anderen zu signalisieren, welche Antwort tatsächlich Ihr Problem gelöst hat.) – joran

+0

@joran Tut mir leid. Ich bin erst vor ein paar Tagen zu Stack Overflow gestoßen. Ich habe es ein- und ausgeschaltet, als es bei der Arbeit an Stata in meinen Suchergebnissen auftauchte, aber ich hatte bis jetzt noch keinen Account. Ich habe immer noch nicht genug Reputation, um etwas zu verbessern oder herabzusetzen. Ich werde daran denken, diese Antworten noch einmal zu überdenken, wenn ich den Ruf habe, den ich brauche. – user2012406

1

Ich rate aus dem Zusammenhang, dass der Begriff "lokal", wenn auf Dateien angewendet bedeutet, dass sie aus Effizienzgründen in den Speicher geladen wurden? Wenn ja, dann müssen Sie erkennen, dass so ziemlich alle gewöhnlichen R-Objekte auf diese Weise behandelt werden. Siehe ?read.table und ?load. Die einzige Möglichkeit, dass Daten nicht lokal bleiben können, besteht darin, dass sie sich in einer Datenbank befinden, die über ein Schnittstellenpaket verfügt, das SQL-Abfragen unterstützt, oder spezielle Pakete wie ff oder bycol verwenden.

Abgesehen davon und Chases Idee, file.path() zu verwenden, wird jeder Verweis auf Dateien oder Verbindungen mit den richtigen Lese-/Lade-/Scan-Funktionen ausgeführt, denen Zeichenwerte als Argumente (mit verschiedenen Namen) gegeben werden. Sie können eine Vielzahl von Low-Level-Funktionen mit ?file sehen und vielleicht einige der zusätzlichen Links von dieser Hilfeseite folgen. Sie könnten ein oder mehrere Ergebnisse einer file.path Konstruktion in einem Zeichenvektor speichern, der zur einfachen Bezugnahme benannt werden könnte.

pathvecs <- c(User= "~/", hrtg="~/Documents/Heritage/") 
pathvecs 
#     User     hrtg 
#     "~/" "~/Documents/Heritage/" 
pathvecs["hrtg"] 
#     hrtg 
#"~/Documents/Heritage/" 
+0

Mit local, meine ich das Makro local in Stata. Es tut mir leid, aber ich denke, ich war mit meiner Frage nicht klar. Ich weiß, wie man die Daten lädt. Ich überlege mir, wie man lange Dateipfade vermeidet, indem man sie als kleines "local" speichert und stattdessen den lokalen Namen verwendet. – user2012406

+0

Das hilft mir nicht zu verstehen. Ich kann nicht herausfinden, warum ein benannter Zeichenvektor keine effektive Methode zum Dokumentieren und Speichern von Pfaden ist. –