我正在使用 gWidgets 在 R 中制作 GUI。到目前为止,我一直在通过全局环境将值从一个窗口传递到另一个窗口。使用全局环境实现起来很简单,但并不理想。一个问题是R CMD check
抱怨缺少全局变量的可见绑定。
作为这个问题的解决方案,一些 R 程序员已经提到了引用类。但是要理解引用类在这种情况下是如何工作的,举一个简单的例子真的很有帮助。
让我给一个愚蠢的 GUI 来使用。当用户点击第一个窗口的按钮时,它会将模型m
置于全局环境中。第二个按钮m
从全局环境中获取并给出输出。当您再次点击第一个按钮时,它将创建一个新模型m
并更改第二个按钮的输出。如果关闭第一个窗口,第二个窗口中的按钮仍然可以工作,因为m
是在全局环境中。
library(gWidgets)
options(guiToolkit = "tcltk")
h1 <- function(h, ...){
d1 <- data.frame(x=runif(10), y=runif(10))
.GlobalEnv$m <- lm(x ~ y, data=d1)
}
g1 <- gbutton("1. Make model",
container=gwindow(), handler=h1)
h2 <- function(h, ...){
d2 <- data.frame(y=(1:10)/10)
p <- predict(.GlobalEnv$m, newdata=d2)
print(p)
}
g2 <- gbutton("2. Make prediction",
container=gwindow(), handler=h2)
在此示例中如何使用引用类?