在保存文件之前,交互式地询问用户文件名

时间:2011-08-23 15:13:10

标签: r

我想手动保存我的标签分隔文件。我的意思是我希望用户在他想要保存数据时选择目录和文件名。 (例如,我已将单个文件合并为单个文件,并希望保存它。)

通常我使用write.table但在write.table中我们定义了该函数中的目录路径和文件名,但我想要一个用户可以在其所需目录中保存任何名称的文件的函数。

5 个答案:

答案 0 :(得分:11)

只需使用file.choose()功能,如下所示:

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

至少在Windows上,这会打开一个save-as命令对话框。

答案 1 :(得分:4)

令人讨厌的是,tcltk软件包没有“另存为”的功能,它只有一个用于选择现有文件的文件选择器。

幸运的是,你可以通过一些tcl电话采取DIY方法:

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

如果需要,可以将tk_choose.files函数源用作模板,以便为tcl(“tk_getSaveFile”)编写更好的接口。在包中看起来似乎是一个明显的遗漏:tcltk虽然......

答案 2 :(得分:1)

使用gWidgets

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

答案 3 :(得分:0)

一个(可能不太理想)选项是使用readline提示用户输入完整路径和文件名(或者只是文件名,如果你想以编程方式选择目录)然后简单地通过write.table上的那个值。这是一个草图:

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)

请注意,根据?readline,这实际上只有在以交互方式运行R时才有效。

答案 4 :(得分:0)

截至2017年,tcltk2套餐是对tcltk的改进:

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

使用过滤器,假设只能保存为JPG / JPEG:

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