R图形用户界面直方图菜单。在变量列表框中单击时出错

R图形用户界面直方图菜单。在变量列表框中单击时出错,r,user-interface,tcl,tk,R,User Interface,Tcl,Tk,正如你所知,我是R方面的新手,我正在尝试构建一个GUI。我包括了一个菜单按钮来创建直方图。所以变量将在一个列表框中,当我选择变量时,应该制作直方图。问题是我遇到了以下错误:“hist.default中的错误:'x'必须是数字”。我的代码怎么了???? 有人能帮我吗???代码如下(已更新) 提前谢谢你 现在更新代码: require(tcltk) tt <- tktoplevel() tkwm.title(tt, "Window") tkgrid(tklabel(tt,text="Varia

正如你所知,我是R方面的新手,我正在尝试构建一个GUI。我包括了一个菜单按钮来创建直方图。所以变量将在一个列表框中,当我选择变量时,应该制作直方图。问题是我遇到了以下错误:“hist.default中的错误:'x'必须是数字”。我的代码怎么了???? 有人能帮我吗???代码如下(已更新)

提前谢谢你

现在更新代码:

require(tcltk)
tt <- tktoplevel()
tkwm.title(tt, "Window")
tkgrid(tklabel(tt,text="Variables"))
tl <- tklistbox(tt,height=5,selectmode="single", background="white")
scr <- tkscrollbar(tt, repeatinterval=3, command=function(...) tkyview(tl,...))
tkgrid(tklabel(tt,text="Choose one:"), tl, scr)

dataframe <- tclVar("myData")
df <- get(tclvalue(dataframe))
vars <- c(names(df))
len <- length(df)

for (i in 1:len) tkinsert(tl,"end",vars [i])

tkselection.set(tl,len)
tkgrid(tklabel(tt, text = " "))

tkgrid.configure(scr,rowspan=4,sticky="nsw")
dfname = tclVar('myData')
varname = tclVar()

OnOK <- function(...)
{
  varchoice = vars[as.numeric(tkcurselection(tl))+1]
  hist(varchoice, col='blue')
}

OK.but <-tkbutton(tt,text="   OK   ",command=OnOK)
tkgrid(OK.but)
tkfocus(tt)
require(tcltk)

tttcl中的所有内容都是一个字符串,因此当您从小部件获取值时,可能需要在R中使用它之前将其显式转换为int或float。

您需要绘制数据,而不是数据的名称。尝试类似于
x的方法—看起来没有数据可绘制。与比较:
hist(数字(0))
谢谢您的帮助。我稍微修改了我的代码。现在我从你给我看的例子中得到了错误。“hist.default中的错误:'x'必须是数字”。我建议您检查
var
实际上是什么。我怀疑这不是你想象的那样。如果您设置
选项(error=recover)
您将能够浏览发生错误的环境进行检查。对不起,James,我对代码做了一些更改。但为了说明问题,我在RStudio中有一个名为“myData”的数据集,其中包含4个变量(其中2个是数值变量)。当我点击变量时,做直方图就是当我得到错误的时候。谢谢布莱恩!我以为我是在OnOK函数上这样做的:varchoice=vars[as.numeric(tkcurselection(tl))+1]。不知道如何处理。@user2993749:不幸的是,您发布的代码没有显示“hist.default”的出现,所以我不知道它是什么,也不知道它为什么不是数字。谢谢您的回答,jverzani!但是我必须使用Tcl/tk包。我对代码做了一点修改,我用单选按钮代替了listbox,它似乎可以工作!
library(gWidgets2)
options(guiToolkit="tcltk")

myData <- mtcars
w <- gwindow("Make a histogram", visible=FALSE)
lyt <- glayout(cont=w)
lyt[1,1] <- "Variables"
lyt[2,1] <- "Choose one"
lyt[2,2:4] <- (tbl <- gtable(names(myData), cont=lyt))
size(tbl) <- c(200, 100)
lyt[3,1] <- (btn <- gbutton("ok", cont=lyt))

addHandlerClicked(btn, handler=function(h,...) {
  x <- get(svalue(tbl), myData)
  hist(x, col="blue")
})
visible(w) <- TRUE