Я делаю графический интерфейс в R, используя gWidgets. До сих пор я передавал значения из одного окна в другое через глобальную среду. Использование глобальной среды просто в реализации, но не идеально. Одна проблема заключается в том, что R CMD check
жалуется на отсутствие видимых привязок для глобальных переменных.
В качестве решения этой проблемы несколько R-программистов упомянули ссылочные классы. Но чтобы понять, как ссылочные классы будут работать в этом контексте, очень поможет простой пример.
Позвольте мне дать глупый графический интерфейс для работы. Когда пользователь нажимает кнопку первого окна, он помещает модель 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)
Как я могу использовать эталонные классы в этом примере?