开发者

Interactively ask user for filename before saving file

I want to save the my tab delim files manually. I mean that I want user to choose the directory and file name when he wants to save the data. (For an example I have merged individual files into single file and want to save it.)

Usually I use write.table but in write.table we define the directory path and file name within that function but I want a function in which user can save file with any name in his desir开发者_运维知识库ed directory.


Just use the file.choose() function,like this:

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

On Windows, at least, that will bring up a dialog for save-as commands.


Annoyingly the tcltk package doesn't have a function for 'Save As', it only has a file selector for choosing an existing file.

Luckily you can take the DIY approach via some tcl calls:

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

The tk_choose.files function source could be used as a template to write a nicer interface to tcl("tk_getSaveFile") if needed. Does seem to be a glaring omission in package:tcltk though...


Using gWidgets:

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


One (perhaps less than ideal) option would be to use readline to prompt the user for the full path and file name (or just the file name if you want to programmatically choose the directory) and then simply pass that value on the write.table. Here's a sketch:

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)

Note that as per ?readline this will really only work when running R interactively.


As it is 2017 now, the tcltk2 package is an improvement of tcltk:

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

And the use of filters, let's say one should only save as JPG/JPEG:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜