Ich mache eine GUI in R mit gWidgets. Bis jetzt habe ich Werte über die globale Umgebung von einem Fenster zum anderen weitergegeben. Die Verwendung der globalen Umgebung ist einfach zu implementieren, aber nicht ideal. Ein Problem ist, dass R CMD check
über fehlende sichtbare Bindungen für globale Variablen klagt. Als Lösung für dieses Problem wurden Referenzklassen von mehreren R-Programmierern erwähnt. Aber um zu verstehen, wie Referenzklassen in diesem Kontext funktionieren, würde es wirklich helfen, ein einfaches Beispiel zu haben.Verwenden von R-Referenzklassen zum Übergeben von Werten von einem Fenster zu einem anderen in einer GUI
Lassen Sie mich ein dummes GUI geben, mit zu arbeiten. Wenn der Benutzer auf die Schaltfläche des ersten Fensters klickt, wird das Modell m
in die globale Umgebung versetzt. Die zweite Schaltfläche ruft m
aus der globalen Umgebung ab und gibt eine Ausgabe aus. Wenn Sie die erste Taste erneut drücken, wird ein neues Modell m
erstellt und die Ausgabe der zweiten Taste geändert. Wenn Sie das erste Fenster schließen, funktioniert die Schaltfläche im zweiten Fenster weiterhin, da sich m
in der globalen Umgebung befindet.
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)
Wie kann ich Referenzklassen in diesem Beispiel verwenden?
Großartiges Beispiel. Der Code gibt eine Warnung aus: In .checkFieldsInMethod (def, fieldNames, allMethods): Die lokale Zuweisung zum Feldnamen ändert das Feld nicht: modelData <- data.frame (x = runif (10), y = runif (10)); sichtbar (win1) <- WAHR; visible (win2) <- TRUE Wollten Sie "<< -" verwenden? (in der Methode "initialisieren" für die Klasse "SillyGui") – JacobVanEtten
@JacobVanEtten Danke. Ich habe die 'modelData <-' Zeile behoben. Die sichtbaren Zeilen sollten lokale Zuweisungen sein. Wickeln Sie den Aufruf von 'setRefClass' in' suppressWarnings', wenn es Sie nervt. –
Danke! Obwohl ich Johns Vorschlag zuerst folgen werde, ist es großartig, dieses Beispiel online zu haben. – JacobVanEtten