2011-08-23 30 views
5

Quiero guardar los archivos de mis separadores de pestañas manualmente. Quiero decir que quiero que el usuario elija el directorio y el nombre del archivo cuando quiera guardar los datos. (Para un ejemplo que he fusionado archivos individuales en un solo archivo y desea guardarlo.)Preguntar de forma interactiva al usuario el nombre del archivo antes de guardar el archivo

Normalmente utilizo write.table pero en write.table que definen la ruta del directorio y el nombre del archivo dentro de esa función, pero quiero una función en la que el usuario puede guarde el archivo con cualquier nombre en su directorio deseado.

Respuesta

4

Es irritante que el paquete tcltk no tenga una función para 'Guardar como', solo tiene un selector de archivos para elegir un archivo existente.

Afortunadamente, usted puede tomar el enfoque de bricolaje a través de algunas llamadas TCL:

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

La fuente tk_choose.files función se podría utilizar como una plantilla para escribir una interfaz más agradable para TCL ("tk_getSaveFile") si es necesario. No parece ser una flagrante omisión en el paquete: tcltk aunque ...

11

sólo tiene que utilizar la función file.choose(), así:

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

En Windows, al menos, que hará aparecer un diálogo para guardar-como comandos.

+0

gracias por su sugerencia, pero abre el cuadro de diálogo estándar del sistema operativo para los comandos de guardar como y no hay opción para guardar. Solo está abierto. – Dinesh

+0

No importa; simplemente escriba el nombre del archivo que desea y presione abrir. Si el archivo no existe, R le preguntará si desea crearlo. –

+3

Ese consejo debe considerarse específico del sistema operativo (no funciona en una Mac) –

0

Una opción (quizás menos que ideal) sería usar readline para solicitar al usuario la ruta completa y el nombre del archivo (o simplemente el nombre del archivo si desea elegir el directorio por programación) y simplemente pasar ese valor en el write.table. He aquí un esbozo:

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) 

Tenga en cuenta que según ?readline esto realmente sólo funcionará cuando se ejecuta R interactiva.

1

Usando gWidgets:

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

Como es ahora 2017, el paquete tcltk2 es una mejora del tcltk:

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

Y el uso de filtros, digamos uno solo debe guardar como JPG/JPEG:

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