Порядок импорта ОПИСАНИЯ: и импорт ПРОСТРАНСТВА ИМЕН() в R 2.14.0 проверка пакета

#r #package

#r #пакет

Вопрос:

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

  1. Пакеты, перечисленные в DESCRIPTION: Imports и NAMESPACE imports(), должны быть одинаковыми, верно?
  2. Имеет ли значение порядок импорта в любом списке? Если да, есть ли какие-либо общие рекомендации о том, как их заказать?
  3. Я использую R —vanilla CMD для проверки pkg_name, чтобы избежать вмешательства моего .Rprofile. Когда my .Rprofile активен и содержит инструкции library (pkg_name), имеет ли значение их порядок?

Ответ №1:

Вы задали три вопроса.

1. Перечислите пакеты в DESCRIPTION , а также NAMESPACE

Каждый пакет, указанный в DESCRIPTION Imports: , должен иметь соответствующую запись NAMESPACE import(...) . Запись в DESCRIPTION может содержать информацию о версии, но в NAMESPACE вы только называете пакет.

Примечание для неосторожных: в ОПИСАНИИ пишется Imports с заглавной I буквы и заканчивается s

Например:

Описание

 Imports:
    stringr (>= 0.5)
  

ПРОСТРАНСТВО ИМЕН

 import(stringr)
  

2. Порядок имеет значение

Пакеты, которые вы load или import более поздние, маскируют пакеты, которые были загружены или импортированы ранее. Это имеет значение только в том случае, если вы импортируете пакеты, которые экспортируют функцию с идентичным именем.

Например, оба lattice и ggplot2 экспортируют layer функцию. Таким образом, если вы сначала импортируете lattice , а затем ggplot2 , это означает, что ggplot2::layer будет маскироваться lattice::layer .

Другими словами, использование layer будет относиться к ggplot2::layer . Если вы хотите сослаться на lattice версию, на которую вам нужно явно ссылаться lattice::layer в вашей функции.

3. Порядок загрузки пакетов также имеет значение

По той же причине порядок загрузки пакетов (либо в скрипт, либо в .Rprofile) имеет значение. Любой загружаемый вами новый пакет будет маскировать функции с тем же именем в ранее загруженных пакетах.

Когда это происходит, R делает разумную вещь и сообщает вам об этом в сообщении консоли.

Вот пример маскирования, возникающего при загрузке reshape пакета, который зависит от plyr , но также маскирует некоторые функции в plyr :

 library(reshape)
Loading required package: plyr

Attaching package: 'plyr'

The following object(s) are masked from 'package:braidppt':

    .


Attaching package: 'reshape'

The following object(s) are masked from 'package:plyr':

    rename, round_any
  

Комментарии:

1. Спасибо, Андри … ваш ответ был очень ясным и подтвердил то, что я думал, что происходит. Теперь я должен выяснить, в каком порядке все должно быть. Возможно, это слишком очевидно, но примечание об этом в R-exts, вероятно, было бы полезно.

2. Оглядевшись немного больше, я вижу, что > конфликты (detail = TRUE) могут помочь мне найти проблему.

3. Обратите внимание, что если у вас есть конфликты, вам, вероятно, следует использовать importsFrom , чтобы просто импортировать выбранные функции из каждого пакета