R GUI开发中的动态ComboBox

时间:2014-09-28 19:22:59

标签: r user-interface gwidgets

我正在尝试在R中创建一个简单的GUI。在此GUI中,我希望有两个组合框,1)来自当前工作空间的数据框列表2)与第一个组合框中选择的数据框相对应的变量名称。我正在尝试使用gWidgets库,但我不知道该怎么做。这个论坛的任何人都可以帮助我吗?感谢

我想通过从inData参数

获取变量名来将SourceVar作为组合框
## list data frames in an environment
lsDF <- function(envir=.GlobalEnv) {
 varNames <- ls(envir=envir)
 dfs <- sapply(varNames, function(i) inherits(get(i,envir=envir),"data.frame"))
 varNames[dfs]
}

testFun <- function(inData,sourceVar,targetVar,outData)
{
inData[[targetVar]] <- as.factor(inData[[sourceVar]])
 assign(outData, inData, envir = .GlobalEnv)
}

lst <- list()
lst$action <- list(beginning="toFactor(",ending=")")
lst$arguments$inData <- list(type="gcombobox",lsDF())
lst$arguments$sourceVar <- list(type="gedit")
lst$arguments$targetVar <- list(type="gedit")
lst$arguments$outData <- list(type="gedit")
ggenericwidget(lst, container=gwindow("Recode to Factor"))

1 个答案:

答案 0 :(得分:2)

我不会使用ggenericwidget(gWidgets2不支持)。而是沿cb <- gcombobox(character(0), cont=...)行创建一个组合框然后填充它调用其[<-方法:例如,cb[] <- lsDf()

以下是您可以使用的模式:

library(gWidgets2)
data(mtcars)
testdf <- data.frame(a=1:3, b= 1:3)

## list data frame names in envir
dfnms <- names(Filter(is.data.frame, mget(ls())) )
lsNms <- function(d, envir=.GlobalEnv)  names(get(d, envir=envir))

w <- gwindow("two combos")
g <- glayout(cont=w)
g[1,1] <- "Data frames:"
g[1,2] <- (dfs <- gcombobox(dfnms, cont=g))
g[2,1] <- "Variables:"
g[2,2] <- (vnames <- gcombobox(character(0), cont=g))

addHandlerChanged(dfs, handler=function(...)  vnames[] <- lsNms(svalue(dfs)))