Интерактивно запросить у пользователя имя файла перед сохранением файла - PullRequest
5 голосов
/ 23 августа 2011

Я хочу сохранить файлы с разделителями моей вкладки вручную. Я имею в виду, что я хочу, чтобы пользователь выбирал каталог и имя файла, когда он хочет сохранить данные. (Например, я объединил отдельные файлы в один файл и хочу сохранить его.)

Обычно я использую write.table, но в write.table мы определяем путь к каталогу и имя файла в этой функции, но мне нужна функция, в которой пользователь может сохранять файл с любым именем в своем желаемом каталоге.

Ответы [ 5 ]

11 голосов
/ 23 августа 2011

Просто используйте функцию file.choose(), например:

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

По крайней мере, в Windows это вызовет диалог для команд сохранения.

4 голосов
/ 23 августа 2011

К сожалению, пакет tcltk не имеет функции «Сохранить как», он имеет только селектор файлов для выбора существующего файла.

К счастью, вы можете использовать самодельный подход с помощью некоторых вызовов tcl:

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

Источник функции tk_choose.files может использоваться в качестве шаблона для записи более приятного интерфейса в tcl ("tk_getSaveFile"), если это необходимо. Кажется, это явное упущение в пакете: хотя tcltk ...

1 голос
/ 23 августа 2011

Использование gWidgets:

gfile("Save yerdata", type = "save", handler = function(h, ...)
{
  write.table(yerdata, file = h$file)
})
0 голосов
/ 25 сентября 2017

Поскольку сейчас 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} * }")
)
0 голосов
/ 23 августа 2011

Один (возможно, не идеальный) вариант - использовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...