这可能很简单,当答案回来时我会畏缩但我完全难过。我已经尝试过手册,尝试搜索网页,各种示例以及我能想到的任何其他内容。我仍然被困住了。
我正在尝试为用户创建一个简单的输入,以便添加两个值,然后我可以在R脚本的其余部分中使用这些值。我需要脚本暂停并等待来自用户的输入,然后在获得输入后继续(就像选择文件函数的工作原理一样)。在阅读了一堆东西之后我决定使用库(tcltk)。我在一个函数中有一个漂亮的小盒子。
inputs <- function(){
xvar <- tclVar("")
yvar <- tclVar("")
tt <- tktoplevel()
tkwm.title(tt,"Input Numbers")
x.entry <- tkentry(tt, textvariable=xvar)
y.entry <- tkentry(tt, textvariable=yvar)
reset <- function()
{
tclvalue(xvar)<-""
tclvalue(yvar)<-""
}
reset.but <- tkbutton(tt, text="Reset", command=reset)
submit <- function() {
x <- as.numeric(tclvalue(xvar))
y <- as.numeric(tclvalue(yvar))
print(x)
print(y)
tkdestroy(tt)
}
submit.but <- tkbutton(tt, text="submit", command=submit)
tkgrid(tklabel(tt,text="Enter Two Inputs"),columnspan=2)
tkgrid(tklabel(tt,text="Input1"), x.entry, pady = 10, padx =10)
tkgrid(tklabel(tt,text="Input2"), y.entry, pady = 10, padx =10)
tkgrid(submit.but, reset.but)
}
当我输入时:
inputs()
弹出漂亮的小方框,我可以输入我的值,例如3和4。
我回来了
<Tcl>
[1] 3
[1] 4
我想在R代码的后续部分中使用这些数字。我怎样才能得到它们以便我能得到相同的效果呢?
input1 <- 3
input2 <- 4
提前感谢您的帮助。
答案 0 :(得分:7)
以下是对您的功能的修改:
inputs <- function(){
xvar <- tclVar("")
yvar <- tclVar("")
tt <- tktoplevel()
tkwm.title(tt,"Input Numbers")
x.entry <- tkentry(tt, textvariable=xvar)
y.entry <- tkentry(tt, textvariable=yvar)
reset <- function()
{
tclvalue(xvar)<-""
tclvalue(yvar)<-""
}
reset.but <- tkbutton(tt, text="Reset", command=reset)
submit <- function() {
x <- as.numeric(tclvalue(xvar))
y <- as.numeric(tclvalue(yvar))
e <- parent.env(environment())
e$x <- x
e$y <- y
tkdestroy(tt)
}
submit.but <- tkbutton(tt, text="submit", command=submit)
tkgrid(tklabel(tt,text="Enter Two Inputs"),columnspan=2)
tkgrid(tklabel(tt,text="Input1"), x.entry, pady = 10, padx =10)
tkgrid(tklabel(tt,text="Input2"), y.entry, pady = 10, padx =10)
tkgrid(submit.but, reset.but)
tkwait.window(tt)
return(c(x,y))
}
现在运行如下函数:
myvals <- inputs()
现在输入您的2个值,然后点击“提交”,然后查看myvals
变量,它包含您的2个值。
答案 1 :(得分:1)
你在提交回调中有他们 - 你只需要把它们放在某个地方。有时全局变量最适合这种情况。只需使用&lt;&lt; - 分配给它们,这样绑定就会发生在submit回调的范围之外。您也可以为此目的使用环境甚至是引用类。