Порядок описания Импорт: и импорт NAMESPACE () в проверке пакета R 2.14.0 - PullRequest
11 голосов
/ 06 ноября 2011

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

  1. Пакеты, перечисленные в ОПИСАНИЕ: Импорт и импорт NAMESPACE () должны совпадать, верно?
  2. Имеет ли значение порядок импорта в любом списке? Если да, то есть ли общий совет о том, как их заказать?
  3. Я использую проверку CMD R --vanilla pkg_name, чтобы избежать вмешательства моего .Rprofile. Когда мой .Rprofile активен и содержит операторы библиотеки (pkg_name), имеет ли значение порядок этих значений?

1 Ответ

16 голосов
/ 06 ноября 2011

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

1.Список пакетов в DESCRIPTION, а также NAMESPACE

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

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

Например:

ОПИСАНИЕ

Imports:
    stringr (>= 0.5)

NAMESPACE

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...