2011-09-11 6 views
5

Sto eseguendo uno studio di simulazione e ho bisogno di elaborare e salvare i risultati da diversi file di testo. Ho organizzato i dati in modo tale che ci siano sottodirectory e all'interno di ciascuna sottodirectory, ho bisogno di elaborare e ottenere risultati individuali per 1000 file di dati. Questo è molto facile da fare in SAS usando le macro. Tuttavia, sono nuovo di R e non riesco a capire come farlo. Di seguito è quello che sto cercando di realizzare.Come posso leggere più file da più directory in R per l'elaborazione?

DATA Folder-> DC1 -> DC1R1.txt ... DC1R1000.txt 
       DC2 -> DC2R1.txt ... DC2R1000.txt 

Qualsiasi aiuto sarebbe molto apprezzato!

+0

Provare 'list.files'. http://stackoverflow.com/search?q=%5Br%5D+list.files –

risposta

7

io non sono vicino a un computer con R in questo momento, ma leggere la guida per le funzioni relative ai file:

La funzione dir presenterà l'elenco delle file e directory. Ha un argomento ricorsivo. list.files è un alias per dir. La funzione file.info ti dirà (tra le altre cose) se un percorso è una directory e file.path unirà le parti del percorso.

Le funzioni basename e dirname potrebbero anche essere utili.

Si noti che tutte queste funzioni sono vettorializzate.

EDIT Ora, a un computer, ecco un esempio:

# Make a function to process each file 
processFile <- function(f) { 
    df <- read.csv(f) 
    # ...and do stuff... 
    file.info(f)$size # dummy result 
} 

# Find all .csv files 
files <- dir("/foo/bar/", recursive=TRUE, full.names=TRUE, pattern="\\.csv$") 

# Apply the function to all files. 
result <- sapply(files, processFile) 
+0

Grazie a tutti per le vostre risposte! @ Tommy ..... La tua codifica funziona fino ad ora .... dita incrociate .... Ho 768 condizioni di dati con 1000 file simulati sotto ogni condizione. Ci vorrà un po 'per elaborare, quindi darò uno stato una volta finito. – Stefanie

0

È possibile utilizzare la funzione di Perl glob() per ottenere un elenco di file e inviarlo a R utilizzando, per esempio, l'interfaccia RSPerl s'.

+0

Ciao Ltamar. Non ho familiarità con Perl. Sono uno statistico e non ho mai avuto la necessità di usarlo. Anche se ... ho sentito che è piuttosto potente. – Stefanie

3

Se è necessario eseguire la stessa analisi su ciascuno dei file, è possibile accedervi in ​​un'unica operazione utilizzando list.files(recursive = T). Questo presuppone che tu abbia già impostato la tua directory di lavoro su Data Folder. Lo recursive = T elenca anche tutti i file all'interno di sottodirectory.

+0

Grazie Ramnath. Non ho mai list.files ma ci provo. La codifica di Tommy sta funzionando finora. – Stefanie

2

Questo vi darà tutti i file che si trovano sotto una cartella e sotto le sottocartelle.

Problemi correlati