Подтвердить что ты не робот

При написании собственного R-пакета я не могу заставить импортировать другие пакеты

Хорошо, сначала попытаемся написать пакет R, и я застрял. Вот как я создаю пакет:

package.skeleton("pkg",code_files=some.filenames)
roxygenize("okg")

Я использую roxygen2 и имею следующий импорт в моем файле "pkg-package.R":

@import data.table zoo lubridate

С терминала я запускаю:

R CMD build pkg
R CMD check pkg
R CMD install pkg

Во время проверки я получаю следующие предупреждения:

** подготовка пакета для ленивой загрузки
Предупреждение: замена предыдущего часа импорта при загрузке lubridate
Предупреждение: замена предыдущего импорта "mday при загрузке" lubridate
Предупреждение: замена предыдущего месяца импорта при загрузке lubridate
Предупреждение: замена предыдущего импорта "wday при загрузке" lubridate
Предупреждение: замена предыдущей недели импорта при загрузке "lubridate"
Предупреждение: замена предыдущего импорта "yday при загрузке" lubridate
Предупреждение: замена предыдущего года импорта при загрузке lubridate
** help
* установка справочных индексов
** построение индексов пакетов...
** тестирование, если установленный пакет может быть загружен
Предупреждающие сообщения:
1: замена предыдущего часа импорта при загрузке lubridate
2: замена предыдущего импорта "mday при загрузке" lubridate
3: замена предыдущего месяца импорта при загрузке lubridate
4: замена предыдущего импорта "wday при загрузке" lubridate
5: замена предыдущей недели импорта при загрузке lubridate
6: замена предыдущего импорта "yday при загрузке" lubridate
7: замена предыдущего года импорта при загрузке lubridate

Я действительно не уверен, что делать с ними, но они кажутся типичными предупреждениями о перезаписи вещей в пространстве имен. В любом случае, я могу установить пакет, но вот что происходит, когда я пытаюсь его использовать:

Библиотека (PKG)
  Переопределение + и - методы для POSIXt, Date и difftime
  Предупреждающие сообщения:
  1: замена предыдущего часа импорта при загрузке lubridate
  2: замена предыдущего импорта "mday при загрузке" lubridate
  3: замена предыдущего месяца импорта при загрузке lubridate
  4: замена предыдущего импорта "wday при загрузке" lubridate
  5: замена предыдущей недели импорта при загрузке lubridate
  6: замена предыдущего импорта "yday при загрузке" lubridate
  7: замена предыдущего года импорта при загрузке lubridate
  d < - my.function(arg1, arg2)
  Ошибка в MATCH (x, x): не удалось найти функцию "MATCH"

Используя traceback(), я узнал, что это генерируется во время вызова merge.zoo(). Поэтому я попытался загрузить зоопарк вручную во время сеанса R и voila, после чего функция работает правильно без сообщения об ошибке.

Я попытался изменить порядок импорта вручную как в файле "pkg-package.R", так и в NAMESPACE. Однако, на основании чего-то, что я нашел в другом месте, я не добавил никаких Импорт или Зависит от ОПИСАНИЯ. Помощь?

4b9b3361

Ответ 1

Предупреждения состоят в том, что data.table и lubridate определяют символ hour и т.д.; см. data.table::hour и lubridate::hour. Вы можете избежать этого, импортируя только функции из lubridate/data.table, которые вы хотите, а не весь пакет; стандартный файл NAMESPACE будет содержать

importFrom(lubridate, hour)

например. В roxygen2 вы должны использовать тег:

@importFrom lubridate hour

Проблема MATCH, вероятно, связана с тем, что merge отправляется неправильно, возможно, потому, что зоопарк должен иметь в своем пространстве имен S3method(merge, zoo), а не export(merge.zoo), как описано в разделе "Написание R-расширений", 1.6.2. Решение здесь состоит в том, чтобы связаться с сопровождающим zoo, packageDescription('zoo')$Maintainer (сопровождающий достаточно разбирается в R, что я чувствую, что я неправильно диагностировал...).

Ответ 2

В качестве временного обходного пути для ошибки MATCH у меня было успешное перечисление пакета zoo в разделе Depends: пакета DESCRIPTION.