I'm experimenting with gWidgetsWWW and encountered a strange error. I created a button with a handler to knit2html a report which used the data.table assignment operator ":=". The report came back with this error:
Error: := is defined for use in j only, and (currently) only once; i.e., DT[i,col:=1L] and DT[,newcol:=sum(colB),by=colA] are ok, but not DT[i,col]:=1L, not DT[i]$col:=1L and not DT[,{newcol1:=1L;newcol2:=2L}]. Please see help(":="). Check is.data.table(DT) is TRUE.
The report generates as expected using knit2html directly and also through RStudio's "Knit HTML" button, so I'm unsure why it fails when knit2html is called by the handler.
Here is a gWidgetsWWW window "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
Here is an example R Markdown Doc which produces the error:
Test Report
===========
```{r test_chunk}
library(data.table)
df<-data.frame(State=rownames(USArrests),USArrests)
data.table(df)[,State:=tolower(State)]
```
Not sure why, but when I call localServerOpen("test_gui.R") and click the button, I get the error...
Any ideas?
Thanks to Zach and Yihui, this is now fixed in data.table v1.8.3 on R-Forge.
The full assignInNamespace command is :
If you're not sure of the exact namespace name, set
options(datatable.verbose=TRUE)
, run the offending line again and an output message should tell you which namespace name was decided not to be data.table aware.Asof the time of this edit, the packages on data.table's whitelist (v1.9.3) are :
They tend to be packages which take user code as input and run that in their own environment.
This seems to be an environment issue. That is probably a problem between
data.table
andgWidgetsWWW
. Onknitr
's side, there is at least one solution, which is to specify the environment forknitr
to be the global environment, e.g.Edit:
To illustrate this issue is irrelevant to
knitr
, try this:Save it as
test_gui.R
, andClick the button and you will also see the error.