2016-04-25 2 views
0

Ich versuche ein kleines Widget zu entwickeln, wo ich eine Zahl in ein Dialogfeld eingeben und diese Nummer später in meinem Arbeitsbereich speichern kann, aber ich bin neu an R und habe Probleme beim Abrufen der Texteingabe, nachdem sie in das Widget eingegeben wurde. Ich habe einige Threads darüber gefunden, wie man die Informationen von einem Widget zu einem anderen weitergibt, aber nicht zurück zum Arbeitsbereich. Die einzige Möglichkeit, die ich habe, ist es, den Code auf die vorletzte Zeile zu setzen und die letzte Zeile einzeln manuell auszuführen. Kann mir bitte jemand helfen ???Wie gib ich gedit Eingabe in R an den Rstudio Arbeitsbereich aus?

# 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

Ich vermute, dass Sie dieses Skript möglicherweise als Datei speichern müssen, z. 'script.R', dann rufe die Datei mit' source ("script.R") 'auf. Macht das den Trick? – CephBirk

+0

Ich glaube, du suchst nach Ginput. Diese Verwendung von 'gedit' mit der' dispose (win) 'Aktion ist nicht richtig. Wenn Sie das Fenster während des Handlers löschen möchten, fügen Sie es dem Handler hinzu und speichern Sie den Wert im Handler. Dafür müssen Sie in eine andere Umgebung zuweisen. Diese Aufgabe wird typischerweise mit '<< -' erledigt. – jverzani

+0

Danke Jungs, ich habe beides versucht. Die Verwendung in einem anderen Skript gab den Eingabetext nicht als Variable an den Arbeitsbereich aus, Ginput funktionierte, aber ich konnte das Ginput-Fenster nicht in den ursprünglichen Container einbetten. Ich möchte dies tun, da dies eine Untermenge von Eingabefenstern in einem Container sein wird. Ich dachte, indem ich entweder die "Eltern" oder "Widget" -Option in Ginput als der Container (grp_name in diesem Fall), dass es den Ginput einbetten würde, aber es tat nicht. Irgendwelche Ideen? Danke für Ihre Hilfe. Es ist sehr geschätzt !!!! –

Antwort

0

Hilft so etwas?

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) })

Ohne einen Trick, Zuordnung in dem Handler wird in einem Rahmen zuweisen, die nicht sichtbar an den Rest des Programms ist. Oben wird eine Umgebung für die Zuweisung verwendet. Zu dieser Aufgabe ist auch der Zuweisungsoperator <<- möglich.

Ich habe auch gformlayout verwendet, um Ihre Widgets besser zu organisieren. Es ist verfügbar mit gWidgets2, die ich anstelle der älteren gWidgets empfehlen würde.

Verwandte Themen