Devtools: namespace tidak menghapus informasi lama ketika @importFrom berubah

Dibuat pada 3 Jan 2014  ·  8Komentar  ·  Sumber: r-lib/devtools

Misalkan saya memelihara dua paket, sebut saja foo dan bar . bar mengekspor fungsi baz dan foo mengimpornya dalam file help.R menggunakan @importFrom , yaitu, di foo/R/help.R ada garis <strong i="11">@importFrom</strong> bar baz . Ketika saya document file namespace dibuat dengan benar sehingga memiliki importFrom(bar,baz) .

Sekarang misalkan, saya mengubah nama baz menjadi bash pada paket bar . Saya memperbarui foo/R/help.R ke <strong i="19">@importFrom</strong> bar bash . Ketika saya document , namespace dengan benar menambahkan importFrom(bar,bash) tetapi tidak menghapus importFrom(bar,baz) jadi saya mendapatkan kesalahan saat menjalankan install .

Saya menggunakan argumen clean = TRUE berpikir yang akan membersihkan ini juga, tetapi sepertinya itu hanya berlaku untuk file man. Apakah saya melewatkan sesuatu di sini? Atau apakah ini bug?

Terima kasih!

Komentar yang paling membantu

hapus file namespace dan lakukan load_all() dan kemudian lakukan devtools::document(). Itu harus melakukan pekerjaan.

Semua 8 komentar

Apakah Anda menggunakan roxygen2 versi terbaru? Itu harus membuat ulang file NAMESPACE dari awal setiap saat.

Ya, saya menggunakan roxygen2 v3.0.0

info sesi()
R versi 3.0.2 (2013-09-25)
Platform: x86_64-apple-darwin10.8.0 (64-bit)

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

paket dasar terlampir:
[1] stats grafik dataset grDevices utils metode dasar

paket terlampir lainnya:
[1] plyr_1.8 ...
ekstrafont_0.15
[25] roxygen2_3.0.0 testthat_0.7.1
[27] devtools_1.4.1

dimuat melalui namespace (dan tidak dilampirkan):
[1] biglm_0.9-1 boot_1.3-9 brew_1.0-6 cluster_1.14.4 codetools_0.2-8
[6] colorspace_1.2-4 corrplot_0.73 data.table_1.8.10 dichromat_2.0-0 digest_0.6.4
[11] evaluasi_0.5.1 format ekstrafontdb_1.0R_0.10 Rumus_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] pelabelan knitr_1.5_0.2 lattice_0.20-24 lubridate_1.3.3 MASS_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 survival_2.37-4 tools_3.0.2 whisker_0.3-2 xtable_1.7-1

Apakah Anda yakin tidak punya <strong i="5">@importFrom</strong> x y lain di tempat lain?

Tidak ada yang jelas, tetapi sepertinya saya harus memiliki sesuatu yang tertinggal di tempat yang tidak saya harapkan. Saya akan terus mencari; maaf mengganggu.

Saya membuka kembali masalah ini karena saya dapat membuat MWE yang menghasilkan kesalahan yang terkait dengan @importFrom (walaupun saya tidak sepenuhnya yakin terkait dengan posting asli saya).

Saya membuat paket kerangka dengan file barebone dan hanya mengedit file help.R , yang sangat sederhana:

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

Ketika saya memanggil document(package_directory, clean = TRUE) (di mana package_directory adalah variabel yang memegang jalur ke paket), semuanya berfungsi dengan baik. Sekarang, saya mengubah help.R menjadi:

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

dan panggil document(package_directory, clean = TRUE) , yang menyebabkan kesalahan, seperti yang diharapkan:

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

Sekarang, mari kembali dan perbaiki help.R sehingga kembali ke aslinya:

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

Ketika saya menelepon document(package_directory, clean = TRUE) , secara mengejutkan saya masih mendapatkan kesalahan yang saya dapatkan ketika bangkrut help.R . Saya akan berpikir itu akan bekerja dengan baik di sini karena document mengabaikan file NAMESPACE .

Sentuhan tambahan adalah jika alih-alih menggunakan document setelah merusak sesuatu, saya menggunakan roxygenize , itu berfungsi dengan baik.

Menurut dokumentasi roxygen , "Jika Anda memiliki paket sederhana, Anda dapat menggunakan roxygenise() , tetapi untuk hal yang lebih rumit, saya sarankan Anda menggunakan document() ." Jadi, mengapa document tidak berfungsi di sini tetapi roxygenize berfungsi? Dan kapan masing-masing harus digunakan?

Adapun versi, saya up to date:

> 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

Ah, masalahnya adalah document() pertama-tama harus menjalankan load_all() untuk memuat paket, dan setelah Anda merusak namespace, tidak ada cara untuk memuatnya. Dalam skenario ini saya biasanya hanya membatalkan perubahan di git.

hapus file namespace dan lakukan load_all() dan kemudian lakukan devtools::document(). Itu harus melakukan pekerjaan.

Masalah lama ini telah dikunci secara otomatis. Jika Anda yakin telah menemukan masalah terkait, harap ajukan masalah baru (dengan reprex) dan tautkan ke masalah ini. https://reprex.tidyverse.org/

Apakah halaman ini membantu?
0 / 5 - 0 peringkat