2016-04-25 80 views
0

我想開發一個小部件,我可以在對話框中輸入一個數字,然後將該數字保存到我的工作空間中以供日後使用,但是我是新的到R,並且在輸入到小部件後無法檢索文本輸入。我發現了一些關於如何將信息從一個小部件傳遞到另一個小部件但不回到工作區的線程。我得到它的唯一方法是將代碼運行到第二行,然後單獨手動運行最後一行。任何人都可以幫我嗎?你如何在R中輸出gedit輸入到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中的「parent」或「widget」選項作爲它將嵌入輸入的容器(在本例中爲grp_name),但它沒有。有任何想法嗎?謝謝你的幫助。它非常感謝! –

回答

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