2013-03-28 14 views
5

Sono un utente Stata che sta cercando di imparare R. Ho un paio di lunghi percorsi di cartelle che, nel mio codice Stata, ho memorizzato come locali. Ho più file in entrambe le cartelle da utilizzare nella mia analisi. So che, in R, posso cambiare la directory di lavoro ogni volta che voglio fare riferimento a un file in una delle cartelle, ma non è sicuramente un buon modo per farlo. Anche se memorizzo i percorsi della cartella come stringhe in R, non riesco a capire come fare riferimento a quelli (come usare `folder1 'in Stata). Mi chiedo se provare a riscrivere il codice di Stata riga per riga in R non sia il modo migliore per imparare R. Qualcuno può aiutare per favore?Equivalente R di macro locali o globali Stata

+0

Penso che stiate cercando 'list.files (.)'. Guarda [** qui **] (http://stackoverflow.com/questions/5758084/loop-in-r-loading-files/5758134#5758134). Controlla anche '? List.files' per tutte le opzioni possibili. – Arun

+1

"Anche se memorizzo i percorsi della cartella come stringhe in R, non riesco a capire come fare riferimento a questi (come usare' folder1 'in Stata). " Puoi dare un esempio concreto di questo problema, con il codice? – joran

+0

@joran folder1 è il nome della variabile. Circondandolo con backtick/tick si risolve il nome e si restituisce il valore. Pensare a Stata mi darà degli incubi ... –

risposta

6

In primo luogo, come un ex utente Stata, mi permetta di consiglio R for Stata Users. C'è anche questo articolo su Macros in R. Penso che @Nick Cox abbia ragione che devi imparare a fare le cose in modo diverso. Ma come te (almeno in questo caso), spesso mi trovo a iniziare un nuovo compito con la mia precedente conoscenza di come farlo in Stata e andare da lì. A volte trovo che gli approcci siano simili. A volte posso far sì che R si comporti come Stata quando un approccio diverso sarebbe migliore (ad es., loops vs. vectorization).

Non sono sicuro che catturerò la tua domanda con il seguente, ma lasciami provare.

In Stata, sarebbe comune scrivere:

global mydata "path to my data directory/" 

Per importare i dati, vorrei solo digitare:

insheet using "${mydata}myfile.csv" 

Come un ex utente Stata, voglio fare qualcosa di simile in R. Ecco cosa faccio:

mydata <- "path to my data directory/" 

Per importare un file csv che si trova in questa directory e creare un frame di dati cal led myfile, vorrei usare:

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

o più efficiente ...

myfile <- read.csv(paste0(mydata, "myfile.csv")) 

io non sono un utente molto efficiente R ancora, quindi forse gli altri vedranno alcuni difetti in questo approccio.

+1

Lo stata chiama il recupero di una stringa denominata (cioè il vettore di caratteri) una "macro"? –

+1

È un esempio di utilizzo di una macro globale. vedere [qui] (http://data.princeton.edu/stata/programming.aspx). Ci sono molti altri usi interessanti. –

+1

Ah. La mia impressione è che R usi le strutture delle liste più di Stata. C'è una funzione che ho visto principalmente nella grafica reticolare chiamata 'modifyList' che potrebbe consentire usi simili. Esistono anche espressioni e la funzione "sostitutiva" nel dominio di manipolazione della lingua che potrebbe essere necessaria per ottenere qualcosa come quella funzionalità. Sembra che gli Stata presumano che otterrà argomenti di testo ordinati senza tanti separatori mentre R ha un maggior grado di separazione dei vettori di caratteri dagli effettivi elementi del linguaggio. –

5

Forse vuoi file.path()?

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

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

Puoi avvolgere source o read.XXX o qualsiasi altra cosa in giro che a fare quello che vuoi.

+0

Grazie a @Chase. Questo risponde alla mia domanda. – user2012406

+0

@ user2012406 Sono felice che tu abbia avuto una risposta che ha risolto il tuo problema! Aiuta a migliorare la qualità del sito se lo si indica facendo clic sul segno di spunta dalla risposta che ha risolto il problema. (Non sei mai obbligato a farlo, ma aiuta a segnalare agli altri che hanno effettivamente risolto il tuo problema.) – joran

+0

@joran Scusa. Sono entrato in Stack Overflow solo un paio di giorni fa. L'ho usato e spento quando è comparso nei miei risultati di ricerca quando lavoravo su stata, ma non ho mai avuto un account fino ad ora. Non ho ancora abbastanza reputazione per invitare o meno nulla. Mi ricorderò di rivisitare queste risposte a upvote quando avrò bisogno della reputazione. – user2012406

1

Sto supponendo dal contesto che il termine "locale" quando applicato ai file significa che sono stati caricati in memoria per scopi di efficienza? Se è così, allora è necessario rendersi conto che praticamente tutti gli oggetti R ordinari vengono gestiti in questo modo. Vedi ?read.table e ?load. L'unico modo in cui i dati possono rimanere non locali è di farli risiedere in un database che ha un pacchetto di interfaccia che supporta query SQL o utilizzare pacchetti specializzati come ff o bycol.

Oltre a questo e l'idea di Chase da usare file.path(), ogni riferimento a file o collegamenti viene fatto usando la corretta lettura/carico/funzioni di scansione a cui valori di carattere vengono passati come argomenti (variamente denominati). Puoi vedere una varietà di funzioni di basso livello con ?file e forse seguendo alcuni dei collegamenti aggiuntivi da quella pagina di aiuto. È possibile memorizzare uno o più risultati di una costruzione file.path in un vettore di caratteri che potrebbe essere denominato per una facile consultazione.

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

Per locale, intendo la macro locale in Stata. Mi dispiace ma credo di non essere stato chiaro con la mia domanda. So come caricare i dati. Sto cercando di evitare di ripetere lunghi percorsi di file memorizzandoli come un piccolo "locale" e usando invece il nome locale. – user2012406

+0

Questo non mi aiuta a capire. Non riesco a capire perché un vettore di caratteri con nome non è un modo efficace per documentare e archiviare percorsi. –