gwidgets gtable refresh - PullRequest
       15

gwidgets gtable refresh

8 голосов
/ 03 июля 2011

Я сталкиваюсь со следующей проблемой:

library(gWidgets)
options(guiToolkit = "RGtk2")

aa <- c(1,2,3)
bb <- c(4,5,6)
cc <- cbind(aa,bb)
cc <-as.data.frame(cc)

t1 <- gtable(cc, container=TRUE)

Я хочу обновить содержимое t1 с помощью:

dd <- c(7,8,9)
dd <- as.data.frame(dd)

Но когда я запускаю

t1[] <- dd

Я получаю: Can't replace with fewer columns

Апостол

Ответы [ 3 ]

3 голосов
/ 04 июля 2011

Чтобы расширить ответ Джона, вот пример.

#Data
cc <- data.frame(aa = 1:3, bb = 4:6)
dd <- data.frame(X = 7:9)

#Wigdets
win <- gwindow()
grp <- ggroup(container = win)
t1 <- gtable(cc, container = grp)

#Refresh widget
delete(grp, t1)
t1 <- gtable(dd, container = grp)

Обратите внимание, что пример кода в вопросе прекрасно работает под gWidgetstcltk; это чисто вопрос GTK.

2 голосов
/ 03 июля 2011

Виджет gtk позволяет вам выбирать тип столбца при создании, поэтому gtable не позволяет вам иметь меньше столбцов или изменять типы столбцов.Если вы действительно хотите это сделать, поместите виджет в контейнер ggroup, затем удалите и добавьте новый виджет.

0 голосов
/ 23 июня 2013

Если речь идет только об обновлении, а не о полном изменении его содержимого, я получил очень приятный опыт с чем-то вроде этого:

win <- gtable(data.frame(a=rnorm(100),b=runif(100)),container=T)
win[1,1] <- 5
win[1:10,2] <- 6
win[seq(dim(win)[1]),seq(dim(win)[2])] <- win[seq(dim(win)[1]),seq(dim(win)[2])] +1 

полное «обновление» может выглядеть следующим образом:

win <- gtable(data.frame(a=rnorm(100),b=runif(100),d=FALSE),container=T)
...