2011-08-23 15 views
5

Desidero salvare la mia scheda delim manualmente. Intendo dire che voglio che l'utente scelga la directory e il nome del file quando vuole salvare i dati. (Per un esempio che ho unito i singoli file in un solo file e vuole salvarlo.)Chiedere in modo interattivo all'utente il nome file prima di salvare il file

Di solito io uso write.table ma in write.table definiamo il percorso della directory e il nome del file all'interno di tale funzione, ma voglio una funzione in cui l'utente può salva il file con qualsiasi nome nella sua directory desiderata.

risposta

4

Annoyingly il pacchetto tcltk non ha una funzione per 'Salva con nome', ha solo un selettore di file per la scelta di un file esistente.

Fortunatamente è possibile prendere l'approccio fai da te con alcune chiamate Tcl:

require(tcltk) 
write.table(yerdata,file = tclvalue(tcl("tk_getSaveFile"))) 

La fonte tk_choose.files funzione potrebbe essere utilizzato come modello per scrivere un un'interfaccia più gradevole per tcl ("tk_getSaveFile") se necessario. Sembra essere una palese omissione nel pacchetto: tcltk però ...

11

basta usare la funzione di file.choose(), in questo modo:

write.table(yerdata, file = file.choose(new = TRUE)) 

In Windows, almeno, che si apre una finestra di dialogo per salvare-come comandi.

+0

grazie per il suggerimento, ma apre la finestra di dialogo standard OS per i comandi save-as e non vi è alcuna opzione per save.there è solo aperto. – Dinesh

+0

Non importa - basta digitare il nome del file desiderato e premere Apri. Se il file non esiste, R ti chiederà se desideri crearlo. –

+3

Questo consiglio deve essere considerato specifico per il sistema operativo (non funziona su un Mac.) –

0

Un'opzione (forse meno che ideale) sarebbe quella di utilizzare readline per richiedere all'utente il nome completo del percorso e del file (o solo il nome del file se si desidera selezionare a livello di programmazione la directory) e quindi semplicemente passare quel valore su il write.table. Ecco uno schizzo:

FILE_PATH <- readline(prompt = "Enter a full path and file name: ") 
#Some checking to make sure you got a valid file path... 
write.table(yerdata, file = FILE_PATH) 

Si noti che secondo ?readline questo sarà davvero funziona solo durante l'esecuzione di R in modo interattivo.

1

Utilizzando gWidgets:

gfile("Save yerdata", type = "save", handler = function(h, ...) 
{ 
    write.table(yerdata, file = h$file) 
}) 
0

Come è ormai 2017, il pacchetto tcltk2 è un miglioramento di tcltk:

library(tcltk2) 
filename <- tclvalue(tkgetSaveFile()) 
if (!nchar(filename)) { 
    tkmessageBox(message = "No file was selected!") 
} else { 
    tkmessageBox(message = paste("The file selected was", filename)) 
} 

E l'uso di filtri, diciamo uno dovrebbe salvare solo come JPG/JPEG:

jpeg_filename <- tclvalue(
    tkgetSaveFile(initialfile = "foo.jpg", 
       filetypes = "{ {JPEG Files} {.jpg .jpeg} } { {All Files} * }") 
) 
Problemi correlati