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!
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/
Komentar yang paling membantu
hapus file namespace dan lakukan load_all() dan kemudian lakukan devtools::document(). Itu harus melakukan pekerjaan.