Devtools: مساحة الاسم لا تحذف المعلومات القديمة عند تغييرimportFrom

تم إنشاؤها على ٣ يناير ٢٠١٤  ·  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 معتقدًا أنها ستنظف هذا أيضًا ، لكن يبدو أن هذا يذهب فقط إلى ملفات man. نسيت شيئا ما هنا؟ أم أن هذا الخلل؟

شكرا!

التعليق الأكثر فائدة

احذف ملف مساحة الاسم ونفّذ load_all () ثم نفّذ devtools :: docuement (). يجب أن تقوم بالعمل.

ال 8 كومينتر

هل تستخدم أحدث إصدار من 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/

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات