Сохранение выбранных значений в gcheckboxgroup в R? - PullRequest
0 голосов
/ 06 марта 2019

Следующий скрипт R представляет собой простой графический интерфейс, использующий gWidgets.

Мне было интересно, почему этот код не сохраняет выбранные значения пользователем в gcheckboxgroup.

#### Clear the Global Environment:
rm(list=ls())

library(rattle)
library(RGtk2)
library(gWidgets)
library(tcltk)
library(lubridate)

w <- gwindow("checkbox example")

gp <- ggroup(container=w)

codes = c(
  "1000 F",
  "0100 Q",
  "0010 M",
  "0001 s")

cbg <- gcheckboxgroup(codes, cont=w)

selected_codes <- paste(svalue(cbg))

ff <- function(h,...) 

selected_codes <- svalue(cbg)

obj_run <- gbutton("Run", container=w, handler = ff)

Ответы [ 2 ]

0 голосов
/ 09 марта 2019

Попробуйте, это меньше хлопот:

library(gWidgets2)

w <- gwindow("checkbox example")

gp <- ggroup(container=w)

codes = c(
  "1000 F",
  "0100 Q",
  "0010 M",
  "0001 s")

g <- ggroup(cont=w, horizontal=FALSE)
cbg <- gcheckboxgroup(codes, cont=g)

selected_codes <- paste(svalue(cbg))

ff <- function(h,...) {

selected_codes <<- svalue(cbg)

}
obj_run <- gbutton("Run", container=g, handler = ff)

(возможно, у вас были проблемы из-за контейнеров.)

0 голосов
/ 07 марта 2019

Спасибо за комментарий jverzani.Однако это не было решением.

На самом деле, нажав кнопку Run в графическом интерфейсе, у нас есть selected_code - это R-память.Но его нельзя сохранить, так как он находится внутри функции / обработчика.Итак, нам нужно сохранить (записать) его в файл (например, .txt), используя этот код:

rm(list=ls())
library(rattle)
library(RGtk2)
library(gWidgets)
library(tcltk)
library(lubridate)

w <- gwindow("checkbox example")

gp <- ggroup(container=w)

codes = c(
  "1000 F",
  "0100 Q",
  "0010 M",
  "0001 s")

cbg <- gcheckboxgroup(codes, cont=w)



obj_run <- gbutton("Run", container=w, handler = function (h ,...){
  selected_codes <- paste0(svalue(cbg))
  write(selected_codes, file = "selected_codes.txt",
        ncolumns = if(is.character(selected_codes)) 1 else 1,
        append = FALSE, sep = " ")


})
...