2011-12-09 22 views
10

Tengo un script R que ejecuta un conjunto de funciones en múltiples conjuntos de datos y crea un conjunto de modelos de concentración-respuesta. Lo que me gustaría hacer es guardar los parámetros del modelo y otros resultados en un archivo csv.Crear un archivo csv vacío en R

Mi plan es hacer que la secuencia de comandos cree un archivo csv vacío y luego a medida que avanza la secuencia de comandos, los resultados se anexan a ese archivo csv. Cada vez que se ejecuta el script, me gustaría sobrescribir los resultados.

He intentado crear un archivo vacío usando

system("copy /y NUL results.csv > NUL") 

para crear el archivo, pero el archivo no se crea. Este comando (es decir, copy/y NUL results.csv > NUL) funciona correctamente cuando se ejecuta directamente en el terminal de Windows.

¿Echo de menos algo simple? El sistema es Windows XP.

¡Gracias a todos!

Respuesta

17

¿Hay algo malo con file.create(), que es portable a través de los sistemas operativos?

file.create("my.csv") 
# [1] TRUE 

A continuación, puede agregar al archivo, p. con el argumento de append=TRUE-write.table(), tal como esto:

df <- data.frame(a=1:4, b=4:1) 
write.table(df, file="my.csv", sep=",", row.names=FALSE, append=TRUE) 
write.table(df, file="my.csv", sep=",", row.names=FALSE, 
      col.names=FALSE, append=TRUE) 

EDITAR Si va a hacer una tonelada de escrituras en cada archivo, se puede ahorrar un tiempo considerable para abrir una conexión con el archivo una vez, y sólo Ciérralo cuando hayas terminado. Si ese no es el caso, el enfoque anterior funciona bien.

+4

Además, prueba 'apropos (" archivo \\. ")' a ver algunas de las otras herramientas de manipulación de archivos disponibles en la base R. –

+0

Funciona, pero estoy recibiendo esto: 'En write.table (df, file =" my.csv ", sep =", ", row.names = FALSE ,: anexando nombres de columna al archivo' – Aerox

0

¿Qué tal

echo > results.csv 
+0

Obtengo resultados similares usando 'echo> results.csv'. Creo que el problema es con la llamada al sistema en lugar del comando real ejecutado, como cualquier comando a stdout (por ejemplo, 'system (" echo Hello! ")' No produce salida. – sinclairjesse

4

Como es un comando de shell, debe usar shell en lugar de sistema.

shell("copy /y NUL results.csv > NUL") 

EDIT. EDIT. Más solución portátil:

cat(NULL,file="results.csv") 
+2

Eso no es portátil en el sistema operativo, lo que quita uno de los tesoros ocultos de R. –

+0

Buen punto Dirk, a la luz de esto, aceptaré la respuesta de Josh. – sinclairjesse

+0

El sistema es Windows XP! –

Cuestiones relacionadas