Saat bekerja untuk memecahkan masalah lain saya mendapat masalah ini:
Saya dapat menghapus semua objek R dengan:
rm(list = ls(all = TRUE))
Apakah ada perintah yang setara yang dapat melepaskan paket yang diinstal selama sesi kerja?
> sessionInfo()
R version 2.12.2 (2011-02-25)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
membutuhkan (ggplot2)
Loading required package: ggplot2
Loading required package: reshape
Loading required package: plyr
Attaching package: 'reshape'
The following object(s) are masked from 'package:plyr':
round_any
Loading required package: grid
Loading required package: proto
sessionInfo ()
R version 2.12.2 (2011-02-25)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] grid stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] ggplot2_0.8.9 proto_0.3-9.1 reshape_0.8.4 plyr_1.4
Saya mencoba cara ini, meskipun itu berhasil bukan solusi global:
pkg <- c("package:ggplot2_0.8.9", "package:proto_0.3-9.1", "package:reshape_0.8.4", "package:plyr_1.4")
detach(pkg, character.only = TRUE)
Error in detach(pkg, character.only = TRUE) : invalid 'name' argument
In addition: Warning message:
In if (is.na(pos)) stop("invalid 'name' argument") :
the condition has length > 1 and only the first element will be used
Apa yang saya cari adalah sesuatu yang global seperti:
rm(list = ls(all = TRUE))
untuk objek, berharap itu tidak akan menghapus paket dasar yang terpasang
Terima kasih;
R CMD check
paket seharusnya membongkar sendiri dengan bersih, jadi R Core berharap ini mungkin dan sesuatu yang mungkin ingin dilakukan.Jawaban:
Jadi, seseorang seharusnya hanya menjawab yang berikut ini.
(edit: 6-28-19) Di versi terbaru R 3.6.0, gunakan saja.
Perhatikan bahwa penggunaan invisible (*) tidak diperlukan tetapi dapat berguna untuk mencegah balasan NULL dari spamming secara vertikal ke jendela R.
(edit: 20/9/2019) Dalam versi 3.6.1
Mungkin berguna untuk mengonversi yang dimuat hanya
names(sessionInfo()$loadedOnly)
ke paket yang dilampirkan secara eksplisit terlebih dahulu, dan kemudian melepaskan paket, jika demikian.Seseorang dapat mencoba untuk membongkar paket dasar melalui $ basePkgs dan juga mencoba menggunakan
unloadNamespace(loadedNamespaces())
. Namun ini biasanya penuh dengan kesalahan dan dapat merusak fungsionalitas dasar seperti menyebabkansessionInfo()
hanya mengembalikan kesalahan. Ini biasanya terjadi karena kurangnya pembalikan dalam desain paket asli. Saat initimeDate
dapat rusak secara permanen, misalnya.sumber
invisible(lapply(paste0('package:', names(sessionInfo()$otherPkgs)), detach, character.only=TRUE, unload=TRUE))
hasil dalamError in FUN(X[[i]], ...) : invalid 'name' argument
kesalahanError in FUN(X[[i]], ...)...
sering terjadi ketika hanya ada nilai NULL. Seseorang dapat menguji ini dengannames(sessionInfo()$otherPkgs)
. Jika kembaliNULL
, maka inilah penyebabnya.Silakan coba ini:
sumber
plyr
&dplyr
tampaknya satu-satunya cara untuk pergi. Terima kasih!Anda sudah dekat. Perhatikan apa yang
?detach
harus dikatakan tentang argumen pertamaname
daridetach()
:Jadi kita perlu memanggil berulang kali
detach()
satu kali per elemenpkg
. Ada beberapa argumen lain yang perlu kami tentukan agar ini berfungsi. Yang pertama adalahcharacter.only = TRUE
, yang memungkinkan fungsi menganggap ituname
sebagai string karakter - ini tidak akan berfungsi tanpanya. Kedua, kami juga mungkin ingin membongkar namespace terkait. Ini dapat dicapai dengan pengaturanunload = TRUE
. Jadi solusinya misalnya:Berikut contoh lengkapnya:
Jika Anda ingin mengubahnya menjadi sebuah fungsi, pelajari kode
sessionInfo()
untuk melihat bagaimana kode tersebut mengidentifikasi apa yang dilabeli sebagai "paket terlampir lainnya:". Gabungkan sedikit kode itu dengan ide di atas dalam satu fungsi dan Anda sudah di rumah dan kering. Aku akan menyerahkan sedikit itu padamu.sumber
pkgs = names(sessionInfo()$otherPkgs)
danpkgs = paste('package:', pkgs, sep = "")
force=TRUE
jika paket memiliki ketergantungan.nothing
Mungkin ada baiknya untuk menambahkan solusi yang disediakan oleh Romain François . Saat memuat paket
nothing
, yang saat ini tersedia di GitHub , akan membongkar semua paket yang dimuat; seperti pada contoh yang diberikan Romain:Instalasi
Dengan menggunakan
devtools
paket:pacman
Pendekatan alternatif menggunakan
pacman
paket yang tersedia melalui CRAN:sumber
pacman::p_unload("all")
akan bekerja juga?Berdasarkan jawaban Gavin tetapi tidak sepenuhnya berfungsi penuh adalah urutan berikut:
sumber
lapply(paste("package:", names(sessionInfo()$otherPkgs), sep=""), detach, character.only = TRUE, unload = TRUE)
. Tidak akan pernah sampai di sana tanpa jawaban Anda!atau jika Anda memiliki RStudio, cukup hapus centang semua kotak yang dicentang di Tab Paket untuk melepaskannya
sumber
ini akan memastikan semua paket terlepas dari paket dasar Anda
sumber
Sering kali ini adalah masalah
plyr
vs.dplyr
Gunakan ini di awal kode:Jadi, setiap kali skrip dijalankan,
plyr
paket akan dihapussumber
jika Anda mengalami masalah dengan paket yang memiliki fungsi bernama serupa yang saling bertentangan, Anda selalu dapat mereferensikan namespace dari paket yang fungsinya Anda inginkan.
sumber
Menggabungkan bit dari berbagai jawaban memberikan solusi paling kuat yang dapat saya temukan ...
sumber