2

我正在尝试显示一个大型 data.table,但我陷入了gtablefrom gWidgetswith的迟缓和from baseRGtk2的不灵活之间。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我只需要显示什么,除非基础表发生变化,我希望能够改变窗口,而不是被迫关闭旧的并打开一个新的。

我看到这个问题Programmatically close the window created by `View(x)`这意味着无法更新View窗口。

我在同一个问题中看到有人提到了 plotrix 包,但我不想要任何情节,我只想要它似乎没有做的表格。

是否有另一个包可以让我在View显示后以编程方式更改窗口的速度?

4

1 回答 1

2

试试 gdfedit。这是在 RGtk2Extras 上进行 dfedit 的简单前端。否则,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 包,其中给出了 R 中的 Programming GUIs一书中的代码。不是堵上书本,而是给你一个地方去寻找其他可以做的事情。

这不会将 GUI 与数据框同步,尽管model可以通过模型本身 ( ) 访问[<-并反映这些更改。

于 2013-06-05T19:42:33.053 回答