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

Jeffrey Arnold jeffrey.arnold at gmail.com
Sat Sep 29 23:02:50 CEST 2012


This is a repost from
http://stackoverflow.com/questions/12655600/weird-behavior-with-data-table-devtools-and-s4,
but now I'm using version 1.8.2 of data.table.

I am getting some really weird behavior when trying to write an S4 subclass
of *data.table*. In short, after loading the *RCurl* package, the "["
method no longer can find variable names in the scope of the data table. I
originally found this out while developing a package with the
*devtools* package,
and traced the problem to importing *RCurl*. *RCurl* and *data.table* are
up to date.

At this point, I have no idea what's going on, but I think the following
code is the best minimal example that reproduces this behavior.

> 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

>

> 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))

>

> ## Everything works!

>

> tables()

     NAME NROW MB COLS  KEY

[1,] DT1     9 1  x,y,v

[2,] DT2     9 1  x,y,v

Total: 2MB

> is(DT2, "data.table")

[1] TRUE

>

> DT1[2]

   x y v

1: a 3 2

> DT2[2]

   x y v

1: a 3 2

>

> (bracketMethods1 <- methods("["))

 [1] [.acf*            [.AsIs            [.bibentry*       [.data.frame

 [5] [.data.table*     [.Date            [.difftime        [.factor

 [9] [.formula*        [.getAnywhere*    [.hexmode         [.ITime*

[13] [.listof          [.noquote         [.numeric_version [.octmode

[17] [.pdf_doc*        [.person*         [.POSIXct         [.POSIXlt

[21] [.raster*         [.roman*          [.simple.list     [.terms*

[25] [.ts*             [.tskernel*


   Non-visible functions are asterisked

>

> DT1[,v]

[1] 1 2 3 4 5 6 7 8 9

> DT2[,v]

[1] 1 2 3 4 5 6 7 8 9

>

> ## These are the packages loaded/imported by RCurl (and [.data.table
works after them).

> ## library("tools")

> ## DT2[,v]

> ## library("bitops")

> ## DT2[,v]

>

> 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


loaded via a namespace (and not attached):

[1] tools_2.15.1

>

> ## 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

>

> ## No changes in the extract S3 methods

> (bracketMethods2 <- methods("["))

 [1] [.acf*            [.AsIs            [.bibentry*       [.data.frame

 [5] [.data.table*     [.Date            [.difftime        [.factor

 [9] [.formula*        [.getAnywhere*    [.hexmode         [.ITime*

[13] [.listof          [.noquote         [.numeric_version [.octmode

[17] [.pdf_doc*        [.person*         [.POSIXct         [.POSIXlt

[21] [.raster*         [.roman*          [.simple.list     [.terms*

[25] [.ts*             [.tskernel*


   Non-visible functions are asterisked

> setdiff(bracketMethods1, bracketMethods2)

character(0)

> setdiff(bracketMethods2, bracketMethods1)

character(0)


Jeff

---
Jeffrey Arnold
Department of Political Science
University of Rochester
http://jrnold.me
jeffrey.arnold at gmail.com
jeffrey.arnold at rochester.edu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/datatable-help/attachments/20120929/92011104/attachment-0001.html>


More information about the datatable-help mailing list