Пользовательский интерфейс 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()

Большое спасибо за вашу помощь!

0 ответов

Другие вопросы по тегам