R:仅在使用data时才加载.新软件包中的图表在钥匙子集上给出了错误



我正在编写一个R软件包,其中我使用一些数据。表功能(特别是基于键的键盘和子集(。我在某个地方读到,要编写一个"好"软件包,我需要确保数据。只需要加载且不附加。因此,我确保在编写未连接数据的代码时确保,而是将函数调用指向数据。使用data.table::命令将函数调用。一个例子是:

ExampleFunction<-function(){
  set.seed(2)
  DT<-data.table::data.table(a=sample(letters[1:5],20,T),b=sample(1:2,20,T),c=1:20)
  data.table::setkeyv(DT,c("a","b"))
  return(DT[list("a",2),])
}

请注意,返回行使用的命令仅在data.table上工作。无论如何,从控制台运行此函数(无数据。

> ExampleFunction()
   a b  c
1: a 2  1
2: a 2 14

但是,当我构建程序包时(描述中列出的数据是导入而不是依赖项(,并且运行相同的函数,我会收到以下错误:

> ExampleFunction()
Error in xj[i] : invalid subscript type 'list' 

带有以下追溯:

4. `[.data.frame`(x, i, j) 
3. `[.data.table`(DT, list("a", 2), ) at Examples.R#5
2. DT[list("a", 2), ] at Examples.R#5
1. ExampleFunction() 

回溯显示此错误发生在函数的返回行中,这意味着它不再将其识别为data.table命令。我的问题是,如果包装在包装外工作,为什么在软件包中会出错?我的软件包是否需要依赖数据。表而不仅仅是导入它?最后,有一种方法可以指定 DT[list("a",2),]是data.table命令?

通过将导入(data.table(包括到我自己的软件包的命名空间中,解决了问题。现在感到非常愚蠢。

最新更新