2011-09-11 13 views
5

Estoy ejecutando un estudio de simulación y necesito procesar y guardar los resultados de varios archivos de texto. Tengo los datos organizados de tal manera que hay subdirectorios y dentro de cada subdirectorio, necesito procesar y obtener resultados individuales para 1000 archivos de datos. Esto es muy fácil de hacer en SAS usando macros. Sin embargo, soy nuevo en R y no puedo entender cómo hacerlo. Debajo está lo que estoy intentando lograr.¿Cómo puedo leer múltiples archivos de múltiples directorios en R para procesarlos?

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

¡Cualquier ayuda sería muy apreciada!

+0

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

Respuesta

7

no estoy cerca de una computadora con R en este momento, pero leer la ayuda para las funciones relacionadas con los archivos:

La función dir aparecerá una lista de archivos y directorios. Tiene un argumento recursivo. list.files es un alias para dir. La función file.info le dirá (entre otras cosas) si una ruta es un directorio y file.path combinará partes de ruta.

Las funciones basename y dirname también pueden ser útiles.

Tenga en cuenta que todas estas funciones están vectorizadas.

EDITAR Ahora en un ordenador, así que aquí está un ejemplo:

# 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

¡Gracias a todos por sus respuestas! @Tommy ..... Tu codificación está funcionando hasta el momento ... cruzó los dedos ... Tengo 768 condiciones de datos con 1000 archivos simulados en cada condición. Llevará un tiempo procesar, por lo que daré un estado una vez que haya terminado. – Stefanie

0

Puede utilizar la función de Perl glob() para obtener una lista de archivos y enviarlo a R utilizando, por ejemplo, la interfaz RSPerl 's.

+0

Hola Ltamar. No estoy familiarizado con Perl. Soy un estadístico y nunca he tenido la necesidad de usarlo. Aunque ... Escuché que es bastante poderoso. – Stefanie

3

Si necesita ejecutar el mismo análisis en cada uno de los archivos, puede acceder a ellos de una vez con list.files(recursive = T). Esto supone que ya ha establecido su directorio de trabajo en Data Folder. El recursive = T enumera todos los archivos dentro de los subdirectorios también.

+0

Gracias Ramnath. Nunca he list.files, pero lo intentaré. La codificación de Tommy está funcionando hasta el momento. – Stefanie

2

filenames <- list.files("path/to/files", recursive=TRUE) Esto le dará todos los archivos que residen en una carpeta y subcarpetas debajo de ella.

Cuestiones relacionadas