لنفترض أن لدي حزمتين ، أطلق عليهما 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
معتقدًا أنها ستنظف هذا أيضًا ، لكن يبدو أن هذا يذهب فقط إلى ملفات man. نسيت شيئا ما هنا؟ أم أن هذا الخلل؟
شكرا!
هل تستخدم أحدث إصدار من roxygen2؟ يجب أن يعيد إنشاء ملف NAMESPACE من البداية في كل مرة.
نعم ، أنا أستخدم roxygen2 v3.0.0
sessionInfo ()
الإصدار 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 Utils قاعدة الطرق
الحزم الأخرى المرفقة:
[1] plyr_1.8 ...
extrafont_0.15
[25] اختبار roxygen2_3.0.0 الذي_0.7.1
[27] devtools_1.4.1
تم تحميلها عبر مساحة اسم (وغير مرفقة):
[1] biglm_0.9-1 boot_1.3-9 brew_1.0-6 collection_1.14.4 codetools_0.2-8
[6] مساحة الألوان_1.2-4 corrplot_0.73 data.table_1.8.10 ثنائي اللون_2.0-0 Digg_0.6.4
[11] قيم_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 HTR_0.2
[21] knitr_1.5 labeling_0.2 lattice_0.20-24 lubridate_1.3.3 MASS_7.3-29
[26] memoise_0.1 munsell_0.4.2 المتوازي_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 Survival_2.37-4 tools_3.0.2 whisker_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 :: docuement (). يجب أن تقوم بالعمل.
تم قفل هذه المشكلة القديمة تلقائيًا. إذا كنت تعتقد أنك وجدت مشكلة ذات صلة ، فيرجى تقديم مشكلة جديدة (مع reprex) والارتباط بهذه المشكلة. https://reprex.tidyverse.org/
التعليق الأكثر فائدة
احذف ملف مساحة الاسم ونفّذ load_all () ثم نفّذ devtools :: docuement (). يجب أن تقوم بالعمل.