[datatable-help] Weird behavior with S4 subclasses of data.table after loading RCurl

Jeffrey Arnold jeffrey.arnold at gmail.com
Sun Sep 30 03:40:37 CEST 2012


While I came across this while working on a package that used S4, the code
in the OP has those errors when run in the global environment.  In the
output below, I put data.table:::cedta() before and after loading RCurl,
and it returns TRUE in both cases. The data.table object DT1 works fine
before and after loading RCurl; DT2, object of the S4 class inheriting from
data.table, is acting like a data.table object and not like a data.frame in
all respects that I've looked at, except when I use an unquoted variable
name in i. That works fine before loading RCurl, but fails after it. I have
no idea what RCurl could be changing that would affect this, which is why I
am stumped.

> library("data.table")
data.table 1.8.2  For help type: help("data.table")
> sessionInfo()
R version 2.15.1 (2012-06-22)
Platform: x86_64-unknown-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=C                 LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] data.table_1.8.2
> ## cedta is TRUE
> data.table:::cedta()
[1] TRUE
>
> setClass("DataTable2", contains="data.table")
>
> DT1 <- data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
> DT2 <- new("DataTable2", data.table(x=rep(c("a","b","c"),each=3),
y=c(1,3,6), v=1:9))
>
> library("RCurl")
Loading required package: bitops
> sessionInfo()
R version 2.15.1 (2012-06-22)
Platform: x86_64-unknown-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=C                 LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] RCurl_1.95-0     bitops_1.0-4.1   data.table_1.8.2
> ## cedta is still TRUE
> data.table:::cedta()
[1] TRUE
>
> ## This still works
> DT1[,v]
[1] 1 2 3 4 5 6 7 8 9
> ## This no longer works
> DT2[,v]
Error: object 'v' not found
>
> ## DT2 still behaving like data.table and not data.frame in other respects
> DT2[ , 4]
[1] 4
> DT2[ , "v"]  # returns v instead of the column
[1] "v"
> DT2[ , "v", with=FALSE] # returns the column
   v
1: 1
2: 2
3: 3
4: 4
5: 5
6: 6
7: 7
8: 8
9: 9



On Sat, Sep 29, 2012 at 8:34 PM, Steve Lianoglou <
mailinglist.honeypot at gmail.com> wrote:

> Hi,
>
> On Sat, Sep 29, 2012 at 6:21 PM, Matthew Dowle <mdowle at mdowle.plus.com>
> wrote:
> >
> > Hi,
> >
> > Quick answer to start. Assuming your package Imports or Depends on
> > data.table (in the DESCRIPTON file) then see here for description of
> > `cedta` and how it works and maybe it needs a fix :
> >
> > http://stackoverflow.com/a/10529888/403310
>
> Quick note: this doesn't look like it has to do w/ cedta ... I was
> debugging this w/ the sample provided and cedta() returns TRUE.
>
> Somehow ~ line 780 of data.table.R, `xvars` is empty and I guess the
> column is injected into the SDenv befure the `jval = eval(jsub,SDenv)`
> call, so its not found.
>
> -steve
>
> --
> Steve Lianoglou
> Graduate Student: Computational Systems Biology
>  | Memorial Sloan-Kettering Cancer Center
>  | Weill Medical College of Cornell University
> Contact Info: http://cbio.mskcc.org/~lianos/contact
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/datatable-help/attachments/20120929/41c97a0d/attachment.html>


More information about the datatable-help mailing list