Блог за онлайн маркетинг за бизнеса

Уеб анализ

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

2
0
0

Искате ли Вашите 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

Синтаксис:

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

Синтаксис:

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

Синтаксис:

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

Синтаксис:

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

Синтаксис:

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»

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

Избор на папка или файл gfile

Синтаксис:

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» започва процес на събиране на данни.

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

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

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) <- workdir
setwd(svalue(workdirblock))
})
#Группируем учетные данные
cred_group <- ggroup(container = win)
#Учетные даные MySQL
mysqlgr <- 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)


#Учетные данные Google
gagroup <- 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)
#Кнопка Start
gbutton("Start", container = win,handler = function(h,...) {
dispose(win)
for(scrnum in svalue(scripts)){
  scriptName <- paste0(scrnum, ".R")
  source(scriptName)
}

})
#Кнопка Cancel
gbutton("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, ще са Ви полезни следните материали:

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

Коментари (0)

Оторизирай се, за да коментираш

Абонирай се

за най-интересен бюлетин за онлайн маркетинг

Най

обсъждано популярно четено