2011-12-09 17 views
10

Ho uno script R che esegue un set di funzioni su più dataset e crea una serie di modelli concentrazione-risposta. Quello che mi piacerebbe fare è salvare i parametri del modello e altri risultati in un file CSV.Crea file csv vuoto in R

Il mio piano è quello di fare in modo che lo script crei un file csv vuoto e, man mano che lo script avanza, i risultati vengono aggiunti al file csv. Ogni volta che si esegue lo script, vorrei che i risultati venissero sovrascritti.

Ho cercato di creare un file vuoto utilizzando

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

per creare il file, ma il file non viene creato. Questo comando (ad esempio, copy/y NUL results.csv > NUL) funziona correttamente quando viene eseguito direttamente nel terminale di Windows.

Mi manca qualcosa di semplice? Il sistema è Windows XP.

Grazie a tutti!

risposta

17

qualcosa che non va con file.create(), che è portabile su sistemi operativi?

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

È quindi possibile aggiungere al file, ad es. utilizzando l'argomento append=TRUE-write.table(), forse in questo modo:

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) 

EDIT Se si farà una tonnellata di scritture per ogni file, è possibile risparmiare molto tempo per aprire una connessione al file una volta, e solo chiudilo quando hai finito. Se questo non è il caso, l'approccio sopra funziona perfettamente.

+4

Inoltre, prova 'apropos (" file \\. ")' a vedere alcune delle altre funzioni di manipolazione dei file disponibili nella base R. –

+0

Funziona ma sto ricevendo questo: 'In write.table (df, file =" my.csv ", sep =", ", row.names = FALSE ,: aggiunta di nomi di colonne al file' – Aerox

0

come circa appena

echo > results.csv 
+0

Ottengo risultati simili usando 'echo> results.csv'. Penso che il problema sia con la chiamata di sistema piuttosto che con l'esecuzione effettiva del comando, dato che qualsiasi comando di stdout (ad es. 'System (" echo Hello! ")' Non produce output. – sinclairjesse

4

Poiché è un comando di shell, è necessario utilizzare shell anziché sistema.

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

MODIFICA. Più soluzione portatile:

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

Questo non è portabile attraverso il sistema operativo, portando via uno dei tesori nascosti di R. –

+0

Buon punto Dirk, alla luce di questo accetterò la risposta di Josh. – sinclairjesse

+0

Il sistema è Windows XP! –