альтернатива gwidgets или View для отображения и обновления data.table

Я пытаюсь отобразить большую таблицу данных, но я застрял между медлительностью gtable из gWidgets с RGtk2 и негибкостью View из базы. В качестве примера я мог бы

ex<-data.table(AA=runif(50000,-10,10),
               BB=runif(50000,-10,10),
               CC=runif(50000,-10,10),
               DD=runif(50000,-10,10),
               EE=runif(50000,-10,10),
               FF=runif(50000,-10,10),
               GG=runif(50000,-10,10),
               HH=runif(50000,-10,10),
               II=runif(50000,-10,10),
               JJ=runif(50000,-10,10),
               KK=runif(50000,-10,10),
               LL=runif(50000,-10,10),
               MM=runif(50000,-10,10))

когда я делаю View(ex), для заполнения требуется секунда. Если я сделаю

gwin<-gwindow(title="example")
gtab<-gtable(ex,container=gwin)

это займет 59 секунд.

Моя проблема с окном View заключается в том, что если моему сценарию нужно его обновить, пользователь должен вручную закрыть окно, а новое окно нужно открыть заново. Моя проблема с gWidgets gtable заключается в том, что в моем реальном сценарии вывод составляет около миллиона строк (плюс-минус), что часто приводит к сбою R до того, как результаты будут заполнены, и всегда занимает больше времени, чем допустимо.

Мне не нужно или я не хочу, чтобы пользователь мог редактировать базовую таблицу через дисплей. Действительно, то, что отображает View, — это все, что мне нужно, за исключением случаев, когда изменяется базовая таблица. Я хочу иметь возможность изменить окно, а не закрывать старое и открывать новое.

Я видел этот вопрос программно закрыть окно, созданное `View(x)` что означает, что нет возможности обновить View windows.

Я видел в том же вопросе, что кто-то сослался на пакет plotrix, но мне не нужны никакие графики, мне просто нужна таблица, которая, похоже, не работает.

Есть ли другой пакет, который даст мне скорость View с возможностью программно изменить окно после его отображения?


person Dean MacGregor    schedule 05.06.2013    source источник


Ответы (1)


Попробуйте gdfedit. Это простой интерфейс для dfedit на RGtk2Extras. В противном случае в Rgtk2 есть модель, которая делает это достаточно простым. Вот довольно минимальный пример:

df <- data.frame(x=rnorm(1e5), y = rnorm(1e5))

library(RGtk2)
model <- rGtkDataFrame(df)
view <- gtkTreeView(model)
mapply(view$insertColumnWithAttributes,  -1, colnames(model), 
       list(gtkCellRendererText()), 
       text = seq_len(ncol(model)) - 1)

sw <- gtkScrolledWindow()
sw$add(view)

win <- gtkWindow(show=FALSE)
win$add(sw)
win$show()

Это должно отображать набор данных этого размера очень быстро. Думаю, 1e6 тоже не проблема. Я позволю тебе попробовать. Этот пример взят из пакета ProgGUIinR, где приведен код из книги Programming GUI in R. Не забивая книгу, но давая вам место для поиска других вещей, которые можно сделать.

Это не синхронизирует графический интерфейс с фреймом данных, хотя к самой модели (model) можно получить доступ через [<-, и эти изменения отражаются.

person jverzani    schedule 05.06.2013
comment
не могли бы вы рассказать об использовании модели в Rgtk2, на которую вы намекаете? - person Dean MacGregor; 06.06.2013