我正在尝试使用gWidgetsWWW并遇到一个奇怪的错误.我创建了一个带有处理程序的按钮,用于knit2html报告,该报告使用了data.table赋值运算符":=".报告回来时出现了这个错误:
错误:: =定义仅用于j,并且(当前)仅用于一次; 即,DT [i,col:= 1L]和DT [,newcol:= sum(colB),by = colA]可以,但不是DT [i,col]:= 1L,而不是DT [i] $ col: = 1L而不是DT [,{newcol1:= 1L; newcol2:= 2L}].请参阅帮助(":=").检查is.data.table(DT)是否为TRUE.
该报告直接使用knit2html生成,也通过RStudio的"Knit HTML"按钮生成,所以我不确定为什么它会在处理程序调用knit2html时失败.
这是一个gWidgetsWWW窗口"test_gui.R":
library(gWidgetsWWW)
library(knitr)
w<-gwindow("Test Window")
g<-ggroup(horizontal=F,cont=w)
b<-gbutton("Report Button",cont=g,handler=function(h,...){
knit2html("test_report.Rmd")
localServerOpen("test_report.html")
})
visible(w)<-T
Run Code Online (Sandbox Code Playgroud)
这是一个产生错误的R Markdown Doc示例:
Test Report
===========
```{r test_chunk}
library(data.table)
df<-data.frame(State=rownames(USArrests),USArrests)
data.table(df)[,State:=tolower(State)]
```
Run Code Online (Sandbox Code Playgroud)
不知道为什么,但是当我调用localServerOpen("test_gui.R")并单击按钮时,我收到错误...
有任何想法吗?
我遇到以下问题:
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)
Run Code Online (Sandbox Code Playgroud)
我想用以下内容刷新t1的内容:
dd <- c(7,8,9)
dd <- as.data.frame(dd)
Run Code Online (Sandbox Code Playgroud)
但是当我跑步的时候
t1[] <- dd
Run Code Online (Sandbox Code Playgroud)
我收到: Can't replace with fewer columns
阿波斯托
我正在尝试为R包开发GUI(使用gWidgets).我的计划是构建一个包含数据的主窗口,并使用按钮为每个函数调用小的gui包装器.不幸的是我遇到了一个基本的(?)问题 - 我不知道如何传输数据.
Questons:
我的问题类似于: 使用gWidgets在R中加载和保存变量,但是根据我的阅读,不推荐使用.GlobalEnv.
我也看到有人使用<< - 运算符:http://www.mail-archive.com/r-sig-gui@r-project.org/msg00053.html,但我无法正确地重现它(和我认为它不适用于我的例子.
下面是一个简单的例子,我尝试将文本发送到另一个窗口,如果按下按钮则再次返回.我已尝试在处理程序内返回,但这不起作用(也不确定是否允许).子窗口在处理程序/内部函数可以对数据执行操作之前立即在函数末尾返回其值.我不知道如何从处理程序到主窗口.
main <- function(){
library(gWidgets)
options(guiToolkit="RGtk2")
w <- gwindow(title="Main window",
visible=FALSE)
txt <- gtext(text="Initial text in main window.",
container=w)
btn <- gbutton("Send to sub window", container=w)
addHandlerChanged(btn, handler = function(h, ...) {
shouldbenew <- subwindow(svalue(txt))
svalue(txt) <- paste("The sub window immediately returns 'TRUE', before pushing 'Return to main':", shouldbenew )
} )
visible(w) <- TRUE
}
subwindow<- function(text){
library(gWidgets)
options(guiToolkit="RGtk2")
sw <- gwindow(title="Sub window", …Run Code Online (Sandbox Code Playgroud) 我正在使用gWidgetsRGtk2构建一个GUI,并且在点击gbutton时出现ggplot时遇到问题.绘图功能单独工作(即当您键入"plotData()"时),但我无法使用gWidgets.gWidgets和ggplot2是否存在兼容性问题,或者我没有正确调用该函数?我从GUI中删除了其他所有内容,使代码更简单,更简单.这是情节应该是什么样子:

library(ggplot2)
library(gWidgets)
library(gWidgetsRGtk2)
require(gWidgets)
options("guiToolkit"="RGtk2")
X<-cbind(runif(120,min=-22,max=-17),runif(120,min=6,max=12))
MU<-matrix(c(-18.96,-15.86,-24.67,4.04,13.57,9.69),nrow=3,ncol=2)
SIG<-matrix(c(0.6,0.77,0.85,0.85,0.55,0.90),nrow=3,ncol=2)
plotData = function(h,...)
{
C_err <- 0.3
N_err <- 1.0
df <- data.frame(x = X[,1],
y = X[,2],
ymin = X[,2] - N_err,
ymax = X[,2] + N_err,
xmin = X[,1] - C_err,
xmax = X[,1] + C_err)
df_MU <- data.frame(x=MU[,1], y=MU[,2],
ymin = MU[,2] - SIG[,2],
ymax = MU[,2] + SIG[,2],
xmin = MU[,1] - SIG[,1],
xmax = MU[,1] + SIG[,1])
ggplot(data = df,aes(x = x,y = y)) +
geom_point() …Run Code Online (Sandbox Code Playgroud) 我正在使用gWidgets(更具体地说gWidgetstcltk)在R中创建GUI .我想知道如何更新选择类型小部件的内容,例如gdroplist和gtable.我目前有一个相当hackish删除小部件并重新创建它的方法.我相信有更好的方法.
这个简单的示例显示了全局环境中的所有变量.
library(gWidgets)
library(gWidgetstcltk)
create.widgets <- function()
{
grp <- ggroup(container = win)
ddl <- gdroplist(ls(envir = globalenv()),
container = grp)
refresh <- gimage("refresh",
dirname = "stock",
container = grp,
handler = function(h, ...)
{
if(exists("grp") && !is.null(grp))
{
delete(win, grp)
}
create.widgets()
}
)
}
win <- gwindow()
create.widgets()
Run Code Online (Sandbox Code Playgroud) 我想知道是否有一种方法可以集成manipulate包或gWidgetsManipulate包,以便它们的输出可以在html/markdown输出文件中查看/操作,因为我认为这在开发可重现的交互式研究报告时非常有用.我知道googleVis有一些功能允许它与knitr集成,以便输出通过使用像results ='asis'这样的选项进入html文件,但googleVis目前在使用滑块时的功能非常严格.
如果还没有完全集成了manipulate或gWidgetsManipulate的软件包输出,那么是否可以暂时建议一个允许在html文件中查看的解决方法?
即我在运行knitr-ing到html之前我的Rmd文件中的当前代码如下所示...但是我得到以下错误.
```{r}
library(manipulate)
manipulate(plot(1:x), x = slider(5, 10))
```
Run Code Online (Sandbox Code Playgroud)
与输出
library(manipulate)
## Error: there is no package called 'manipulate'
manipulate(plot(1:x), x = slider(5, 10))
## Error: could not find function "manipulate"
Run Code Online (Sandbox Code Playgroud)
所以尝试使用gWidgetsManipulate包...
```{r}
library(gWidgetsManipulate)
manipulate(plot(1:x), x = slider(5, 10))
```
Run Code Online (Sandbox Code Playgroud)
你得到错误......
library("gWidgetsManipulate")
## Loading required package: gWidgets
manipulate(plot(1:x), x = slider(5, 10))
## Error: unable to find an inherited method for function ".gwindow", for signature "NULL"
Run Code Online (Sandbox Code Playgroud)
我试图通过使用像这样的东西来指定一个guiToolkit来修复这个错误
options(guiToolkit="WWW")
Run Code Online (Sandbox Code Playgroud)
但无济于事......
任何帮助将不胜感激,提前感谢
我正在使用gWidgets在R中制作GUI.到目前为止,我一直在通过全球环境将值从一个窗口传递到另一个窗口.使用全局环境很容易实现,但并不理想.一个问题是R CMD check抱怨缺乏对全局变量的可见绑定.
作为这个问题的解决方案,几个R程序员已经提到了引用类.但是要理解引用类在这种情况下如何工作,有一个简单的例子真的很有帮助.
让我给一个愚蠢的GUI工作.当用户点击第一个窗口的按钮时,它将模型m放在全局环境中.第二个按钮m来自全局环境并提供输出.当您再次点击第一个按钮时,它将创建一个新模型m并更改第二个按钮的输出.如果关闭第一个窗口,第二个窗口中的按钮仍然可以工作,因为m它位于全局环境中.
library(gWidgets)
options(guiToolkit = "tcltk")
h1 <- function(h, ...){
d1 <- data.frame(x=runif(10), y=runif(10))
.GlobalEnv$m <- lm(x ~ y, data=d1)
}
g1 <- gbutton("1. Make model",
container=gwindow(), handler=h1)
h2 <- function(h, ...){
d2 <- data.frame(y=(1:10)/10)
p <- predict(.GlobalEnv$m, newdata=d2)
print(p)
}
g2 <- gbutton("2. Make prediction",
container=gwindow(), handler=h2)
Run Code Online (Sandbox Code Playgroud)
如何在此示例中使用引用类?
我正在编写一个小型数据库接口,并希望使用glayout.MWE:
require(gWidgets)
options("guiToolkit"="RGtk2")
### The bowl
win <- gwindow( "Fruits")
gui <- glayout( container = win )
### Fruit salad
gui[1,1] <- glabel( "Apple", cont = gui )
gui[1,2] <- gbutton( "Change", cont = gui )
nav1 <- function( gui )
{
svalue( gui[1,1] ) <- "Banana"
}
addHandlerClicked( gui[1,2], handler = function( h, ... )
{
nav1( gui )
})
Run Code Online (Sandbox Code Playgroud)
功能似乎在那里但我得到一个错误(或它是一个警告?)消息
(R:14953): Gtk-CRITICAL **: IA__gtk_table_attach: assertion `child->parent == NULL' failed
Run Code Online (Sandbox Code Playgroud)
我找到了rseek(没有)和谷歌的解决方案(没有任何我可以与我的具体问题相关).任何想法我可以做什么来摆脱消息?或者我可以安全地忽略它们吗?
sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: x86_64-pc-linux-gnu (64-bit) …Run Code Online (Sandbox Code Playgroud) 我有以下代码来选择输入和输出文件夹的目录.
require(gWidgets2RGtk2)
input=NULL
win = gwindow("Stage 1")
g = ggroup(horizontal=FALSE,cont=win)
g1=ggroup(cont=g)
svalue(input)<-gbutton("Input folder",cont=g1,expand=TRUE,handler=function(...) {
input=gfile(type="selectdir")
gmessage(paste0("Input directory set to ",input))
input
})
g2=ggroup(cont=g)
gbutton("Ouput folder",cont=g2,expand=TRUE,handler=function(...) {
output=gfile(type="selectdir")
gmessage(paste0("Output directory set to ",output))
})
Run Code Online (Sandbox Code Playgroud)
但是,在运行时,代码不会返回输入和输出文件夹目录.谁能告诉我这里我做错了什么?
在R中是否有一种方法可以提示用户(即scanf)获取信息,还允许使用字符串数组作为可能的完成来自动完成该提示?
基本上,寻找类似GNU Readline for R的东西(理想情况下是一个例子).
我想用ggtk2组合gWidgets(john verzani).这可以被任何人用作范例.
算法如下:步骤1:构造一个gwindow(或gframe)步骤2:构造GTK可滚动文本视图步骤3:将最后一个转换为gwidget步骤4:将其添加到gwindow(或gframe)中
我想知道这是否是一个正确的思考,而我面临的问题是GTK可滚动文本视图:我无法使滚动条工作.
R中的代码如下:
###########################
# load libraries
library(RGtk2)
library(gWidgets)
library(gWidgetsRGtk2)
# data set
x <- c(1:9)
y <- c(10:19)
z <- c(20:29)
df <- data.frame(x, y, z)
df.co <- capture.output(df)
###########################
# STEP 1, library(gWidgets)
# Construct a gwindow (or a gframe)
G.Window <- gwindow()
###########################
# STEP 2, library(RGtk2)
# Construct a GTK scrollable text view
Gtk.Text.View <- gtkTextViewNew(show = TRUE)
# create a table to attach the scrollbars
Gtk.Table.New <- gtkTableNew(2, 2, show = TRUE)
# …Run Code Online (Sandbox Code Playgroud)