我目前正在编写一个程序,用户可以对动物的某些特征赋予某些重量值,以评估它们的相关性。因为特征的数量是动态的,即用户可以输入具有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。