Пользовательский интерфейс Rscript и TclTk
Я пытался запустить приложение, которое я создал с помощью R через Rscript
команда. Весь код хранится в одном файле.R.
Приложение создается путем вызова некоторых функций и упаковки всех входов и выходов функций в графический интерфейс пользователя с использованием пакета R tcltk
, На данный момент пользователь должен запустить R, перейдите в File -> Source... и выберите файл.R, содержащий все функции, необходимые для запуска приложения. Отображается графический интерфейс пользователя, и пользователь может нажимать кнопки, вставлять некоторые значения, которые вводятся в качестве входных данных для функций, которые запускаются нажатием кнопок, и может читать выходные данные через метки в графическом пользовательском интерфейсе или загружая некоторые файлы CSV...
Чтобы избежать такой последовательности операций для запуска приложения, я хотел бы создать файл.bat (и файл.sh в Unix), который вызывает Rscript
Команда для чтения.R-файла, открывающего приложение: таким образом, пользователь просто должен дважды щелкнуть по.bat-файлу, чтобы открыть приложение.
Тем не менее, когда я бегу Rscript "myApp.R"
GUI открывается и исчезает почти сразу, и он не остается открытым, как если бы файл.R вызывался File -> Source..., что делает пользователя неспособным что-либо делать.
Я также пытался заставить скрипт.bat вызывать файл.R, содержащий команду source("myApp.R")
, но результат тот же.
Я также пытался заменить Rscript "myApp.R"
команда с R -e "source('myApp.R')"
команда, но результат все тот же.
Есть ли какие-либо аргументы, которые необходимы для Rscript
(или же R
Командой, чтобы избежать такой проблемы? Или требуется дополнительный код в файле.R для правильного вызова Rscript
(или же R -e
)?
Я сообщаю здесь структуру файла myApp.R:
# Functions
functions <- function() {
function1 <<- function(arg1, arg2, ...) {
}
function2 <<- function(arg1, arg2, ...) {
}
...
}
# GUI with TclTk
programGUI <- function() {
# Functions associated with buttons, i.e. triggered when the buttons are pressed; inputs come from entries in the GUI or by other functions' outputs
functionA <- function(arg1, arg2, ...) {
}
functionB <- function(arg1, arg2, ...) {
}
...
# Window GUI
window <- tktoplevel(bg = "white")
tkwm.resizable(window, FALSE, FALSE)
tkraise(window)
tktitle(window) <- "My Program with GUI"
# Buttons
button1 <- tkbutton(window, ...)
button2 <- tkbutton(window, ...)
# Labels
label1 <- tklabel(window, ...)
label2 <- tklabel(window, ...)
# Entries
entry1 <- tkentry(window, ...)
entry2 <- tkentry(window, ...)
# TclTk GUI grid
tkgrid(button1)
tkgrid(label1)
tkgrid(entry1)
tkgrid(button2)
tkgrid(label2)
tkgrid(entry2)
}
# Call the functions
functions()
# Run the GUI
programGUI()
Большое спасибо за вашу помощь!