aggiungere un’intestazione di file creato da “scrivere.csv”

Sto cercando di automatizzare alcune di esportazione dei dati, e vorrei aggiungere un’intestazione per ogni file come “si prega di citare Bob e Jane 2008” … o anche un paio di righe di istruzioni specifiche a seconda del contesto.

Ho guardato la scrittura.csv e scrivere.tabella di documentazione, ma non vedi che tali funzioni.

Qual è il modo più semplice per raggiungere questo obiettivo?

È possibile utilizzare writeLines per aggiungere un’intestazione e li write.csv con opzione append=TRUE per scrivere i tuoi dati.
append viene ignorato e impostato automaticamente F per write.csv, utilizzare write.table, sep = ',' invece.

OriginaleL’autore Abe | 2012-09-12

One Reply
  1. 16

    Qui sono possibili due approcci – la soluzione sotto MODIFICA utilizzando connessioni è più flessibile ed efficiente.


    Utilizzando write.table(...,append = T) e cat

    • Utilizzare append=T all’interno di una chiamata a write.table, avendo cat l’intestazione in precedenza

    avvolto nel suo funzione….

    write.table_with_header <- function(x, file, header, ...){
      cat(header, '\n',  file = file)
      write.table(x, file, append = T, ...)
    }

    Nota che append viene ignorata in un write.csv chiamata, quindi è sufficiente chiamare

    write.table_with_header(x,file,header,sep=',')

    e che si tradurrà in un file csv.


    MODIFICA

    utilizzando connessioni

    (Grazie a @flodel la cui proposta è questa)

    my.write <- function(x, file, header, f = write.csv, ...){
    # create and open the file connection
      datafile <- file(file, open = 'wt')
    # close on exit
      on.exit(close(datafile))
    # if a header is defined, write it to the file (@CarlWitthoft's suggestion)
      if(!missing(header)) writeLines(header,con=datafile)
    # write the file using the defined function and required addition arguments  
      f(x, datafile,...)
    }

    Di notare che questa versione consente di utilizzare write.csv o write.table o di qualsiasi funzione e utilizza un file di collegamento che
    (@flodel indica nei commenti)
    solo aprire e chiudere il file, una volta, e aggiunge automaticamente. Quindi è più efficiente!

    Considerare l’utilizzo di file e close per aprire e chiudere un file di connessione. In caso contrario l’apertura e la chiusura del file due volte che è un po ‘ inefficiente. Con una connessione aperta, si sono sempre aggiungendo, quindi non sarà necessario append = TRUE, ed è possibile utilizzare write.csv.
    geniale!
    Per rendere questo completamente flessibile in funzione, magari aggiungere una riga in modo che funziona anche senza intestazione. Qualcosa di simile if(!missing(header)) writelines(headder,con=datafile) . Quindi può essere un nome “mywrite” 🙂 invece di “scrivere.con.di intestazione.forse”
    Buone idee e implementato
    2 ° funzione (il mio.scrivi) ha funzionato per me. 1 ° funzione (scrivere.table_with_header) necessari “rownames = F”; considerare la possibilità di spostare la “modifica” nella parte superiore nel caso in cui qualcuno è pigro come me e non scorrere verso il basso

    OriginaleL’autore mnel

Lascia un commento