Обработка кнопки в R

Всем здравствуйте.

Пишу интерфейс на R в RStudio. Мне нужно сделать так, чтобы данные, которые человек вводит в интерфейсе, после нажатия на кнопку "Добавить" записывались в таблицу, оттуда я их заношу в свой скрипт. Проблема в том, что при нажатии на кнопку данные не добавляются. Если вместо моего кода занесения данных в таблицу прописать, например функцию print('ok') в handler, она отрабатывает при нажатии, а мой код (data_for_buget[1, "id_camp"] <- svalue(text_box_id)) - нет. Вот сам код:

> data_for_buget <- data.frame(id_camp = 1, date_from = is.numeric.Date(), stop_buget = 1, note_buget = 1)

#окно

win <- gwindow(title = "Test window")

grp_name <- ggroup(container = win, horizontal = FALSE, spacing = 5)

id_campaign <- glabel("Id кампании: ", container = grp_name)

text_box_id <- gedit("Введите Id кампании", container = grp_name)

#кнопка для добавления данных id

btn_id <- gbutton("Добавить", container = grp_name, handler = function(h,...) { data_for_buget[1, "id_camp"] <- svalue(text_box_id)})***

Можете, пожалуйста, подсказать, в чем проблема?


Ответы (1 шт):

Автор решения: Arcady Perla

Ваш код выполняется внутри функции. Соотвественно data_for_buget расмматривается функцией как ее внутренняя переменная - она создается, в нее добавляются данные, и она удаляется по завершению функуии.

А вам нужно, как я понимаю, из тела функции внести данные в переменную, за пределами самой функции. Для этого в R нужно использовать специальный оператор присваивания не <- , как обычно, а <<- , который для этого и предназначен. Попробуйте в коде функции написать

data_for_buget[1, "id_camp"] <<- svalue(text_box_id)

Должно работать.

→ Ссылка