R: только загрузка при использовании data.tables в новом пакете приводит к ошибке на ключевом подмножестве - PullRequest
0 голосов
/ 17 мая 2019

Я пишу пакет R, в котором я использую некоторые функции data.table (в частности, ключ и подмножество на основе ключей).Я где-то читал, что для того, чтобы написать «хороший» пакет, мне нужно было убедиться, что data.table нужно только загружать, а не присоединять.Поэтому при написании кода я убедился, что я не прикрепляю data.table, а скорее направил вызовы функций в пространство имен data.table с помощью команды 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.tables, но я не могу указать пространство имен data.table стандартным способом (так как при поискеDT в пространстве имен data.table).В любом случае, запуск этой функции из консоли (без подключения к data.table) дает ожидаемый результат:

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

Однако, когда я собираю свой пакет (с таблицей data.table, указанной в описании в качестве импорта,не является зависимостью), и, выполнив ту же функцию, я получаю следующую ошибку:

> 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.Мой вопрос: почему это идет не так в пакете, если он работает вне пакета?Должен ли мой пакет зависеть от data.table, а не просто импортировать его?И, наконец, есть ли способ указать, что DT[list("a",2),] является командой data.table?

1 Ответ

2 голосов
/ 17 мая 2019

Решил проблему, включив import (data.table) в пространство имен моего собственного пакета.Чувствую себя довольно глупо.

...