Предположим, я поддерживаю два пакета, назовем их 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
, думая, что это также очистит это, но похоже, что это относится только к справочным файлам. Я что-то упустил здесь? Или это ошибка?
Спасибо!
Вы используете последнюю версию 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/
Самый полезный комментарий
удалите файл пространства имен и выполните load_all(), а затем выполните devtools::document(). Он должен работать.