Devtools: namespace не удаляет старую информацию при изменении @importFrom

Созданный на 3 янв. 2014  ·  8Комментарии  ·  Источник: r-lib/devtools

Предположим, я поддерживаю два пакета, назовем их foo и bar . bar экспортирует функцию baz , а foo импортирует ее в файл help.R, используя @importFrom , т. е. в foo/R/help.R есть строка <strong i="11">@importFrom</strong> bar baz . Когда я document , файл пространства имен создается правильно, поэтому он имеет importFrom(bar,baz) .

Теперь предположим, что я изменил имя baz на bash в пакете bar . Я обновляю foo/R/help.R до <strong i="19">@importFrom</strong> bar bash . Когда я document , пространство имен правильно добавляет importFrom(bar,bash) , но не удаляет importFrom(bar,baz) , поэтому я получаю ошибки при запуске install .

Я использую аргумент clean = TRUE , думая, что это также очистит это, но похоже, что это относится только к справочным файлам. Я что-то упустил здесь? Или это ошибка?

Спасибо!

Самый полезный комментарий

удалите файл пространства имен и выполните load_all(), а затем выполните devtools::document(). Он должен работать.

Все 8 Комментарий

Вы используете последнюю версию roxygen2? Он должен каждый раз воссоздавать файл NAMESPACE с нуля.

Да, я использую roxygen2 v3.0.0

информация о сеансе()
R версия 3.0.2 (2013-09-25)
Платформа: x86_64-apple-darwin10.8.0 (64-разрядная версия)

локаль:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

прилагаемые базовые пакеты:
[1] статистика наборы графических данных grDevices использует базу методов

другие прилагаемые пакеты:
[1] plyr_1.8 ...
экстрашрифт_0.15
[25] roxygen2_3.0.0 testthat_0.7.1
[27] devtools_1.4.1

загружается через пространство имен (и не прикрепляется):
[1] biglm_0.9-1 boot_1.3-9 brew_1.0-6 cluster_1.14.4 codetools_0.2-8
[6] цветовое пространство_1.2-4 корр.плот_0.73 данные.таблица_1.8.10 дихромат_2.0-0 дайджест_0.6.4
[11] Assessment_0.5.1 extrafontdb_1.0 formatR_0.10 Formula_1.1-1 ggplot2_0.9.3.1
[16] gmp_0.5-11 grid_3.0.2 gtable_0.1.2 Hmisc_3.13-0 httr_0.2
[21] вязать_1.5 маркировка_0.2 решетка_0.20-24 смазать_1.3.3 МАССА_7.3-29
[26] memoise_0.1 munsell_0.4.2 parallel_3.0.2 proto_0.3-10 R.cache_0.9.0
[31] R.methodsS3_1.5.2 R.oo_1.15.8 R.utils_1.28.4 RColorBrewer_1.0-5 RCurl_1.95-4.1
[36] reshape2_1.2.2 rjson_0.2.13 Rttf2pt1_1.2 Scales_0.2.3 Splines_3.0.2
[41] stringr_0.6.2 выживания_2.37-4 tools_3.0.2 вискер_0.3-2 xtable_1.7-1

Вы уверены, что у вас нет другого <strong i="5">@importFrom</strong> x y в другом месте?

Ничего очевидного, но кажется, что у меня должно быть что-то затяжное там, где я этого не ожидаю. я буду продолжать искать; извините, что надоедаю.

Я снова поднимаю этот вопрос, потому что мне удалось создать MWE, который выдает ошибку, связанную с @importFrom (хотя я не совсем уверен, что это связано с моим исходным сообщением).

Я создал каркасный пакет с базовыми файлами и отредактировал только файл help.R , что очень просто:

#' <strong i="9">@docType</strong> package
#'
#' <strong i="10">@importFrom</strong> plyr ddply
NULL

Когда я вызываю document(package_directory, clean = TRUE) (где package_directory — это переменная, содержащая путь к пакету), все работает нормально. Теперь я меняю help.R на:

#' <strong i="17">@docType</strong> package
#'
#' <strong i="18">@importFrom</strong> plyr
NULL

и вызовите document(package_directory, clean = TRUE) , что, как и ожидалось, вызовет ошибку:

Error in asChar(ivars) : 
  empty name in directive 'importFrom' in 'NAMESPACE' file

Теперь давайте вернемся и исправим help.R , чтобы он вернулся к оригиналу:

#' <strong i="27">@docType</strong> package
#'
#' <strong i="28">@importFrom</strong> plyr ddply
NULL

Когда я звоню document(package_directory, clean = TRUE) , я, к удивлению, все еще получаю сообщение об ошибке, которое я получил, когда сломал help.R . Я бы подумал, что здесь это сработает нормально, потому что document игнорирует файл NAMESPACE .

Дополнительный поворот заключается в том, что если вместо использования document после поломки я использую roxygenize , все работает нормально.

Согласно документации roxygen : «Если у вас простой пакет, вы можете использовать roxygenise() , но для чего-то более сложного я рекомендую вам использовать document() ». Итак, почему document здесь не работает, а roxygenize работает? И когда следует использовать каждый из них?

Что касается версий, я в курсе:

> sessionInfo()
R version 3.0.3 (2014-03-06)
Platform: x86_64-apple-darwin10.8.0 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  datasets  grDevices utils     methods   base     

other attached packages:
[1] plyr_1.8.1     extrafont_0.16 roxygen2_3.1.0 testthat_0.8.1 devtools_1.4.1

Ах, проблема в том, что document() сначала нужно запустить load_all() , чтобы загрузить пакет, и как только вы нарушили пространство имен, загрузить его невозможно. В этом случае я обычно просто отменяю изменения в git.

удалите файл пространства имен и выполните load_all(), а затем выполните devtools::document(). Он должен работать.

Эта старая проблема была автоматически заблокирована. Если вы считаете, что нашли связанную проблему, создайте новую проблему (с репрексом) и дайте ссылку на эту проблему. https://репрекс.tidyverse.org/

Была ли эта страница полезной?
0 / 5 - 0 рейтинги