2016-04-25 28 views
0

Я пытаюсь разработать небольшой виджет, в котором я могу ввести число в диалоговом окне, а затем сохранить этот номер в моем рабочем пространстве для дальнейшего использования позже, однако я новичок к R, и мне трудно получить ввод текста после ввода его в виджет. Я нашел некоторые темы о том, как передавать информацию из одного виджета в другой, но не вернуться в рабочую область. Единственный способ заставить его работать - запустить код ко второй последней строке и вручную запустить последнюю строку отдельно. Кто-нибудь может мне помочь???Как вы выводите вход gedit в R в рабочее пространство Rstudio

# clearing workspace 
rm(list = ls()) 

# Loading packages 
library(gWidgets) 
library(gWidgetstcltk) 

# Setting up Widget 
win=gwindow(title='Experiment setup',visible = TRUE) 
grp_name <- ggroup(container = win) 
okbut<-ggroup(container = win) 
lbl_data_frame_name <- glabel(
    'Choose number of indexing variables: ', 
    container = grp_name 
) 
#Asking user for input 
obj<-gedit(container=grp_name,handler=function(h,..){ 
    print(as.integer(svalue(h$obj))) 
    }, action = dispose(win)) 
#Attempt to return text from user input to workspace 
textfromgedit=svalue(obj) 
+0

Я подозреваю, что вам может понадобиться сохранить этот скрипт в виде файла, например. 'script.R', затем вызовите файл с помощью' source ("script.R") '. Это делает трюк? – CephBirk

+0

Я думаю, что вы ищете 'ginput'. Это использование 'gedit' с действием' dispose (win) 'является неправильным. Если вы хотите очистить окно во время обработчика, добавьте его в обработчик и сохраните значение в обработчике. Для этого вам нужно назначить в другую среду. Эта задача обычно выполняется с помощью '<< -'. – jverzani

+0

Спасибо, ребята, я попробовал оба. Использование в другом скрипте не выводило входной текст в качестве переменной в рабочую область, ginput работал, однако мне не удалось встроить окно ginput в исходный контейнер. Я хочу сделать это, так как в конечном итоге это будет подмножество окон ввода в одном контейнере. Я подумал, установив параметр «родительский» или «виджет» в ginput в качестве контейнера (в этом случае имя grp_name), что он будет внедрять ginput, но это не так. Есть идеи? Спасибо за вашу помощь. Его очень ценят !!!! –

ответ

0

Что-то вроде этого поможет?

library(gWidgets2) results <- new.env() win <- gwindow("Save number") gp <- gformlayout(container=win) gedit("", container=gp, label="Number of variables", coerce.with=as.numeric, handler=function(h,...) { results$values <- svalue(h$obj) })

Без какой-то трюк, назначение в обработчик присвоит в объеме, который не виден на остальной части программы. В приведенном выше примере для назначения используется среда. Для этой задачи также возможен оператор назначения <<-.

Я также использовал gformlayout, чтобы лучше организовать ваши виджеты. Он доступен с gWidgets2, который я бы рекомендовал использовать вместо старых gWidgets.

 Смежные вопросы

  • Нет связанных вопросов^_^