如何从R / gwidgets2RGtk2中的动态循环“gedit”GUI返回值?

时间:2016-08-25 14:37:20

标签: r dynamic gwidgets

我目前正在编写一个程序,用户可以对动物的某些特征赋予某些重量值,以评估它们的相关性。因为特征的数量是动态的,即用户可以输入具有X个动物和Y个特征的文件,我希望通过循环呈现该选项。

#A simple input
G <- c("Length", "Width", "Size")

#Creating the base structure. I wish to pack the code as a framed element in the GUI.
require(gWidgets2RGtk2) #Load package
W <- gwindow("Weight Values", visible = TRUE)
WW <- ggroup(cont = W, expand = TRUE, horizontal = FALSE)
w <- gframe("Variables", cont = W, expand = TRUE, horizontal = FALSE)
value_list <- list()

#Creating the dynamic gedits.
for (i in 1:(length(G))) {
   g <- gframe(paste("Trait:", i), cont = w, expand = TRUE)
   a <- gedit("1",cont=g)
   addHandlerKeystroke(a, handler=function(...) { 
   value_list[i] <<- svalue(a)

})
}

#After filling in numbers, the call for the list gives only the latest value.    Not the earlier values 
value_list

返回value_list给出了这个。 (在填写4,5,6作为值之后):

 > value_list
 [[1]]
 NULL

 [[2]]
 NULL

 [[3]]
 [1] "6"

我希望代码返回4,5,6。我试图为“a”引入某种动态的向量列表,但这只会给出错误。

非常欢迎改进和方法的建议。

提前致谢!

ps:在提出这个问题之前,我确实看过this question。但是,循环部分似乎会造成麻烦。

编辑(30-8-2016):

我要感谢约翰的建议。通过以下代码替换“#Creating the dynamic gedits”子标题的内容:

sapply(1:length(G), FUN = function(i) {
   g <- gframe(paste("Trait:", i), cont = w, expand = TRUE)
   a <- gedit("1", cont=g)
   addHandlerKeystroke(a, handler=function(...) { 
        value_list[i] <<- svalue(a)
   })
})

代码设法工作,没有出错。非常感谢你!我现在能够访问value_list。

0 个答案:

没有答案