我正在尝试显示一个大的 data.table,但我陷入了 gWidgets
与 RGtk2
的 gtable
的缓慢之间> 以及从基础查看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
的速度,并能够在显示后以编程方式更改窗口?
最佳答案
尝试 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 包,其中给出了Programming GUIs in R一书中的代码。不是塞满这本书,而是给你一个地方来寻找一些其他可以做的事情。
尽管可以通过 model
访问模型本身 ( [<-
),但这不会将 GUI 同步到数据框。这些变化都会得到反射(reflect)。
关于r - 用于显示和更新 data.table 的 gwidgets 或 View 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16944934/