[datatable-help] Import problem with data.table in packages

Ken Williams Ken.Williams at windlogics.com
Wed May 1 22:59:08 CEST 2013


Hi,

I've got a small test package constructed like so:

------------ R/MyCode.R: ---------------
##' Example function.
##'
##' @export
##' @import data.table
myfunc <- function() {
  dt1 <- data.table(time=1:5, key='time')
  dt2 <- data.table(time=3:8, key='time')
  dat <- merge(dt1, dt2, all=TRUE)
}

------------ DESCRIPTION: ---------------
Package: TestMod
Type: Package
Title: My test package
Version: 1.0
Author: Ken Williams <kwilliams at windlogics.com>
Maintainer: Ken Williams <kwilliams at windlogics.com>
Description: A test package
License: BSD
Imports:
    data.table
Collate:
    'MyCode.R'
-----------------------------------------------

I process the package with ROxygen in RStudio, which produces an empty `inst/` directory, some docs in `man/`, and a `NAMESPACE` file:

------------ DESCRIPTION: ---------------
export(myfunc)
import(data.table)
-----------------------------------------------

Now, if I start a fresh R session and load this package, I get a namespace error:

------------ R 2.15.2 session: ---------------
> library(TestMod)
> myfunc
function ()
{
    dt1 <- data.table(time = 1:5, key = "time")
    dt2 <- data.table(time = 3:8, key = "time")
    dat <- merge(dt1, dt2, all = TRUE)
}
<environment: namespace:TestMod>
> myfunc()
Error in rbind(deparse.level, ...) :
  could not find function ".rbind.data.table"
-----------------------------------------------

Sometimes, in other (more complicated) code, I instead get the error 'could not find function "data.table"'.

To my eyes, the imports look correct, so I can't see what the problem is:

------------ R 2.15.2 session: ---------------
> getNamespaceImports('TestMod')$data.table
          %between%              %chin%              %like%    .__C__data.table
        "%between%"            "%chin%"            "%like%"  ".__C__data.table"
        .__C__IDate         .__C__ITime        .__T__$:base      .__T__$<-:base
      ".__C__IDate"       ".__C__ITime"      ".__T__$:base"    ".__T__$<-:base"
       .__T__[:base   .rbind.data.table                  :=           alloc.col
     ".__T__[:base" ".rbind.data.table"                ":="         "alloc.col"
     as.chron.IDate      as.chron.ITime       as.data.table            as.IDate
   "as.chron.IDate"    "as.chron.ITime"     "as.data.table"          "as.IDate"
           as.ITime             between             chgroup             chmatch
         "as.ITime"           "between"           "chgroup"           "chmatch"
            chorder                  CJ                copy          data.table
          "chorder"                "CJ"              "copy"        "data.table"
              fread              haskey                hour           IDateTime
            "fread"            "haskey"              "hour"         "IDateTime"
      is.data.table                 key               key<-                last
    "is.data.table"               "key"             "key<-"              "last"
               like                mday               month             quarter
             "like"              "mday"             "month"           "quarter"
          rbindlist                 set             setattr         setcolorder
        "rbindlist"               "set"           "setattr"       "setcolorder"
             setkey             setkeyv            setnames                  SJ
           "setkey"           "setkeyv"          "setnames"                "SJ"
             tables     test.data.table           timetaken          truelength
           "tables"   "test.data.table"         "timetaken"        "truelength"
               wday                week                yday                year
             "wday"              "week"              "yday"              "year"
-----------------------------------------------

Any suggestions?

I think for now, I can work around the problem by doing 'Depends: data.table' in my `DESCRIPTION` file.  I'd like to not do that though.

--
Ken Williams, Senior Research Scientist
WindLogics
http://windlogics.com


________________________________

CONFIDENTIALITY NOTICE: This e-mail message is for the sole use of the intended recipient(s) and may contain confidential and privileged information. Any unauthorized review, use, disclosure or distribution of any kind is strictly prohibited. If you are not the intended recipient, please contact the sender via reply e-mail and destroy all copies of the original message. Thank you.


More information about the datatable-help mailing list