我正在尝试在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"))
答案 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)))