Как да разработим графичен интерфейс за R скриптове?

Искате ли Вашите R-скриптове да могат да се пускат от потребители без умения за програмиране? Създайте удобно и понятно десктоп приложение.

Езика R е предназначен предимно за Back End програмиране, но на него може да се разработи достатъчно удобен графичен интерфейс. В тази статия ще разкажа какви графични елементи можете да създадете с помощта на пакета «gWidgets» и ще споделя няколко примера за интерфейс, разработен на R.

Как да инсталираме пакета «gWidgets»?

Разработката на интерфейса започва с инсталирането и включването на пакетите «gWidgets». В R конзолата пуснете този код:

install.packages(“gWidgets”)install.packages
(“gWidgetstcltk”)library(“gWidgets”)library
(“gWidgetstcltk”)options("guiToolkit"="tcltk")

Какви елементи на интерфейса са достъпни?

В пакета «gWidgets» има достатъчно много графични елементи за интерфейса — да разгледаме основните.

1. Диалогов прозорец — «gwindow» и «gbasicdialog»

Основен и главен контейнер за всички графични елементи на интерфейса.

Ако планирате в бъдеще да стартирате разработения интерфейс с помощта на BAT или EXE-файл, препоръчвам в качеството на главен контейнер да използвате «gbasicdialog». При стартиране от BAT-файл елементът на интерфейса «gwindow» се изгражда и моментално се затваря, без да чака действия от потребителя.

Готово, вече съществува начин, който да Ви позволи да стартирате интерфейс с помощта на BAT-файл, дори ако е изграден чрез «gwindow». Веднага след завършването на кода на графичния интерфейс, използвайте командата «Sys.sleep(300)» и прозорецът няма да се затваря.

Синтаксис:

gwindow(title = "Window", visible = TRUE, 
name=title,width = NULL, height= NULL, 
parent=NULL,handler = NULL, action = NULL,..., 
toolkit = guiToolkit())gbasicdialog(title = "Dialog", 
widget, parent=NULL, do.buttons=TRUE,handler = 
NULL, action=NULL,  ..., toolkit=guiToolkit())

Основни аргументи:

  • title — заглавие на диалоговия прозорец.
  • visible — видимост на диалоговия прозорец, приема стойност «FALSE» или «TRUE». Може да се изключи видимостта на изграждането на прозореца и на всички негови елементи и да го включите, след като прозорецът бъде напълно формиран, с помощта на функция visible.
  • handler — обработчик на събития, в които Вие пишете анонимна функция, стартираща се при активиране на елемента. Задължителни аргументи в тази функция — function(h,...).

2. Бутон — «gbutton»

Функцията «gbutton» създава бутон в посочения контейнер.

Синтаксис:

gbutton(text = "", border=TRUE, handler = NULL, action = NULL, container = NULL,  ..., toolkit = guiToolkit())

Основни аргументи:

  • text — текст на бутона.
  • handler — обработчик на събития, в които Вие пишете анонимна функция, стартираща се при активиране на елемента. Задължителни аргументи на тази функция — function(h,...).
  • container — контейнер, в който се поставя бутона.

Пример на използване:

obj <- gbutton("Hello world", container = gwindow())

3. Етикет — «glabel»

Текстов блок в диалоговия прозорец, който се използва за описание на различна информация.

Синтаксис:

glabel(text = "", markup = FALSE, editable = FALSE, handler = NULL,action = NULL, container = NULL, ..., toolkit = guiToolkit())

Основни аргументи:

  • text — текст на етикета.
  • handler — обработчик на събития, в които Вие пишете анонимна функция, стартираща се при активиране на елемента. Задължителни аргументи на тази функция — function(h,...).
  • container — контейнер, в който ще бъде поставен поставен етикета.

Пример на използване:

obj <- glabel("Hello world", container = gwindow())

4. Текстово поле — «gedit»

В диалоговия прозорец се появява текстово поле, в което потребителят може да въвежда свои данни.

Синтаксис:

gedit(text = "", width = 25, coerce.with = NULL, initial.msg="",handler = NULL, action = NULL, container = NULL, ..., toolkit = guiToolkit())

Основни аргументи:

  • text — текст на етикета.
  • handler — обработва  събития, в които Вие пишете анонимна функция, стартираща се при активиране на елемента. Задължителни аргументи на тази функция — function(h,...).
  • container — контейнер за текстово поле.

Пример на използване:

obj <- gedit("Hello world", container = gwindow())

5. Списък с възможност за избор на един елемент — «gradio»

Списък, в който може да се отбележи един елемент.

Синтаксис:

gradio(items, selected = 1, horizontal = FALSE, handler= NULL, action = NULL, container = NULL, ..., toolkit = guiToolkit())

Основни аргументи:

  • items — вектор от стойности, възможни за избиране.
  • selected — числова стойност на номера на елемента, който ще бъде избран по подразбиране.
  • horizontal — ориентация на списъка (TRUE — хоризонтална, FALSE — вертикална).
  • handler — обработване на събития, в които Вие пишете анонимна функция, стартираща се при активиране на елемента. Задължителни аргументи на тази функция — function(h,...).
  • container — контейнер, в който се поставя списъка.

Пример на използване:

obj <- gradio(c("hello","world"), container=gwindow())

6. Падащ списък — «gcombobox»

Падащия списък е по-компактна алтернатива на списъка с възможност за избор на един елемент.

Синтаксис:

gcombobox(items, selected = 1, editable = FALSE, coerce.with=NULL, handler = NULL,  action = NULL, container = NULL, ..., toolkit = guiToolkit())

Основни аргументи:

  • items — вектор от стойности, възможни за избиране.
  • selected — числова стойност на номера на елемента, който ще бъде избран по подразбиране.
  • handler — обработване на събития, в които Вие пишете анонимна функция, стартираща се при активиране на елемента. Задължителни аргументи на тази функция — function(h,...).
  • container — контейнер за поставяне на падащия списък.

Пример на използване:

obj <- gcombobox(c("hello","world"), container=gwindow())

7. Списък с възможност за избор на няколко елемента — «gcheckboxgroup»

Пакетът «gcheckboxgroup» дава възможност на потребителя да маркира произволен брой елементи от списъка.

Синтаксис:

gcheckboxgroup(items, checked = FALSE,  horizontal = FALSE, use.table=FALSE,  handler = NULL, action = NULL, container = NULL, ..., toolkit = guiToolkit())

Основни аргументи:

  • items — вектор от стойности, възможни за избиране.
  • horizontal — ориентация на списъка (TRUE — хоризонтална, FALSE — вертикална).
  • handler — обработване на събития, в които Вие пишете анонимна функция, стартираща се при активиране на елемента. Задължителни аргументи на тази функция — function(h,...).
  • container — контейнер за поставяне на списъка.

Пример на използване:

obj <- gcheckboxgroup(c("hello","world"), container=gwindow()

8. Календар — «gcalendar»

С помощта на този елемент удобно се избира дата.

Синтаксис:

gcalendar(text = "", format = "%Y-%m-%d", handler=NULL,action=NULL, container = NULL, ..., toolkit = guiToolkit())

Основни аргументи:

  • text — дата по подразбиране.
  • format — формат, в който се показва датата.
  • handler — обработване на събития, в които Вие пишете анонимна функция, стартираща се при активиране на елемента. Задължителни аргументи на тази функция — function(h,...).
  • container — контейнер, в който се показва календара.

Пример на използване:

obj <- gcalendar(text = as.character(Sys.Date()),container=gwindow())

9. Избор на папка или файл — «gfile»

Този елемент показва на екрана диалогов прозорец за отваряне или съхраняване на файлове и папки.

https://images.netpeak.net/blog/vybor-papki-ili-fajla-gfile.png

Синтаксис:

gfile(text = "", type = c("open", "save", "selectdir"), 
initialfilename = NULL,  filter = list("All files" 
= list(patterns = c("*")), "R files" =  list(patterns 
= c("*.R","*.Rdata")),      "text files" 
= list(mime.types = c("text/plain"))      
), multi=FALSE, handler = NULL, action 
= NULL, ..., toolkit = guiToolkit())

Основни аргументи:

  • text — заглавие на диалогов прозорец, отварящ се за избор на файл или папка.
  • type — тип на диалогов прозорец, приема стойност «open» (получи път до файла), «save» (запази обекта във вид на файл) и «selectdir» (получи път до папка).
  • handler — обработване на събития, в които Вие пишете анонимна функция, стартираща се при активиране на елемента. Задължителни аргументи на тази функция — function(h,...).

Пример на използване:

obj <- gbutton("Select file", container=gwindow(), handler = function(h,...) {gfile(text = "Select file", type = "selectdir")})

Как да разработим елементарен графичен интерфейс?

Да разгледаме как може да се прилагат основни елементи от пакета. За пример, да създадем текстово поле с възможност за въвеждане на свое име и бутон, при натискане на който да се появи приветствено съобщение.

  1. За основен контейнер избираме «gwindow».
main_window <- gwindow(title = "My main windows")

Функцията «gwindow(title = "My main windows")» създава главния диалогов прозорец, който трябва да се напълни с графични елементи.

  1. В началото добавяме текстов етикет, за да обясним на потребителите какви данни трябва да се въведат в полето.

За да създадете етикет, използвайте функция «glable("Enter your name", container = main_window)». Първият аргумент отговаря за текста на етикета. Аргументът container сочи контейнера, в който ще се показва етикетът — ние сме посочили «main_window», тъй като именно в този обект сме запазили създадения в първата стъпка диалогов прозорец.

  1. Последният елемент на диалоговия прозорец е бутонът «Hello!».

Бутонът се създава с помощта на функция «gbutton("Hello!", container = main_window, handler = function(h,...)». Първият аргумент отговаря за текста на бутона, вторият — сочи контейнера, в който ще се показва бутонът. Аргументът «handler» обработва събитие, а значи в него трябва да се опише функцията, която се изпълнява при натискане на бутона:

function(h,...){gmessage(paste0("Hello ",svalue(username),"!"))}

Тази функция извежда на екрана съобщение, създадено с помощта на функция «gmessage». За да се появи име, въведено от потребителя в текстовото поле, аз използвам  функция «svalue» — тя приема в качеството на аргумент обект, чиято стойност искате да получите.

  1. В резултат ще получите такъв код:
#Создаем диалоговое окноmain_window <- gwindow(title = 
"My main windows")#Добавляем подпись к текстовому полюglable
("Enter your name", container = main_window)#Добавляем текстовое полеusername 
<- gedit("User name", container = main_window)#Добавляем кнопкуgbutton("Hello!", 
container = main_window, handler = function(h,...)
{#Описываем действия которые будут 
выполнены при нажатие на кнопкуgmessage(paste0("Hello ",
svalue(username),"!"))})

Задействайте кода в R-конзолата или R Studio и ще се формира диалогов прозорец.

В текстовото поле може да въведете своето име и да натиснете бутон «Hello!», след това ще се появи приветстващо съобщение.

Пример на сложен графичен интерфейс, разработен в R

Използвайки пакета «gWidgets», може да се създават и достатъчно сложни интерфейси.

В тази точка ще покажа графичен интерфейс за стартиране на скриптове. В диалоговите прозорци може да се въведат потребителски параметри, необходими за свързване към API, да се избере период на статистика и конкретни скриптове. След натискане на бутона «Start» започва процес на събиране на данни.

https://images.netpeak.net/blog/primer-sloznogo-graficeskogo-interfejsa-razrabotannogo-v-r.png

Скрипт за създаване на показания по-горе интерфейс:

library(gWidgets)library(gWidgetstcltk)library(lubridate)options(guiToolkit="tcltk")
#переходим в рабочую директориюsetwd("C:/ppc_bi")#ПериодcurrentDate <-Sys.Date()eopm 
<- currentDate - days(day(currentDate))sopm <- currentDate - days(day(currentDate))sopm 
<- sopm - days(day(sopm) - 1)#Строим диалоговое окноwin 
<- gbasicdialog("BI Data Uploader System v 1.0",visible = F,do.buttons=FALSE)
#Выбор рабочей папки
dirgroup <- gframe("Work directory",container = win,horizontal = T)workdirblock 
<- gedit("C:/ppc_bi", container = dirgroup)gbutton("Choice", 
container = dirgroup,handler = function(h,...) {workdir <<- 
gfile("Select directory",type="selectdir")svalue(workdirblock) 
<- workdirsetwd(svalue(workdirblock))})#Группируем учетные данныеcred_group 
<- ggroup(container = win)#Учетные даные MySQLmysqlgr 
<- gframe("MySQL credentials",container = cred_group,horizontal = F)
glabel("Host:",container = mysqlgr)host <- gedit("", container 
= mysqlgr)glabel("User:",container = mysqlgr)user 
<- gedit("", container = mysqlgr)glabel("Pass:",container = mysqlgr)pass 
<- gedit("", container = mysqlgr)#Учетные данные Googlegagroup 
<- gframe("Google credentials",container = cred_group,horizontal 
= F)glabel("Clientid:",container = gagroup)clientid <- gedit("", 
container = gagroup)glabel("Client secret:",container = gagroup)clientsecret 
<- gedit("", container = gagroup)glabel("Adwords API token:",container = gagroup)adwords_api_token 
<- gedit("", container = gagroup)#ID докса - справочника проектовdoxgroup 
<- gframe("Project dictionary document key",container = win)doxid 
<- gedit("", container = doxgroup, width = 50)#Установка отчетного периодаgrperiod 
<- gframe("Period",container = win,horizontal = F)glabel("From: ",container = grperiod)date_from 
<- gcalendar(text = as.character(sopm), format = "%Y-%m-%d",  
container = grperiod)glabel("To: ",container = grperiod)date_to   
<- gcalendar(text = as.character(eopm), format = "%Y-%m-%d",  
container = grperiod)#Выбор скриптов которые необходимо запуститьgrscripts 
<- gframe("Scripts",container = win,horizontal = T)scripts 
<- gcheckboxgroup(c("AdWords","Facebook","Direct","QualityScore","LostProfit","Summary"), 
container=grscripts)#Кнопка Startgbutton("Start", container = win,handler 
= function(h,...) {dispose(win)for(scrnum in svalue(scripts)){  
scriptName <- paste0(scrnum, ".R")  source(scriptName)}})#Кнопка 
Cancelgbutton("Cancel", container = win,handler = function(h,...) 
{dispose(win)})#Включаем окноvisible(win, set = T)

Изводи

С помощта на пакета «gWidgets» можете да организирате R-скриптове във вид на десктоп приложения с разбираем интерфейс.

Достъпни са следните графични елементи:

  1. Диалогов прозорец, в който ще се съдържат всички следващи елементи на интерфейса.
  2. Бутон с текстов надпис и функция, която ще се изпълнява при натискане.
  3. Текстов блок, с помощта на който ще можете да обясните предназначението на определени части на интерфейса.
  4. Текстово поле за въвеждане на данни.
  5. Списъци с възможност за избор на един или няколко елемента.
  6. Падащ списък, който позволява по-компактно представяне на списък от достъпни елементи.
  7. Календар за удобен избор на дати и периоди.
  8. Диалогов прозорец за избор на папка или файл.

Изброените елементи са достатъчни за създаване на интерфейси, които да опростят работатата със скриптове на езика R.


В тази статия са разгледани най-важните възможности на пакета «gWidgets», но в действителност те са повече. Ако искате  да се задълбочите в разработката на потребителски интерфейси на език R, ще са Ви полезни следните материали:

0
0
0
Открихте грешка? Маркирайте я и натиснете Ctrl + Enter.