Cómo descargar un paquete sin reiniciar R

541

Me gustaría descargar un paquete sin tener que reiniciar R (principalmente porque reiniciar R al probar diferentes paquetes en conflicto se está volviendo frustrante, pero posiblemente esto podría usarse en un programa para usar una función y luego otra, aunque el espacio de nombres la referencia es probablemente una mejor idea para ese uso).

?library no muestra ninguna opción que pueda descargar un paquete.

Hay una sugerencia que detachpuede descargar el paquete, pero ambos fallan:

detach(vegan)

Error en detach(vegan): nameargumento no válido

detach("vegan")

Error en detach("vegan"): nameargumento no válido

Entonces, ¿cómo descargo un paquete?

Ari B. Friedman
fuente
55
@Iterator: una biblioteca es una ubicación donde encuentras paquetes. (No son sinónimos). .libPaths()Le proporciona las rutas a todas las bibliotecas de su sistema.
Richie Cotton
17
@ Richie: Gracias. Entiendo eso en el contexto R, pero siento que el uso de R sobrecarga o hace que el término sea ambiguo libraryde dos maneras: 1: no es el mismo uso libraryque en otros lugares, y 2: el término se usa library()para cargar ... no un biblioteca, pero un paquete.
Iterator
2
@Iterator Tienes razón. Esta fue la respuesta que necesitaba, y cuando busqué en Google usé "opuesto a require" o "deshacer library" porque así es como normalmente cargo, erm, "paquetes". Por lo tanto, titularlo correctamente hace que la pregunta sea más correcta pero también más difícil de encontrar.
isomorfismos el

Respuestas:

657

Prueba esto (ver ?detachpara más detalles):

detach("package:vegan", unload=TRUE)

Es posible tener varias versiones de un paquete cargadas a la vez (por ejemplo, si tiene una versión de desarrollo y una versión estable en diferentes bibliotecas). Para garantizar que todas las copias se separen, use esta función.

detach_package <- function(pkg, character.only = FALSE)
{
  if(!character.only)
  {
    pkg <- deparse(substitute(pkg))
  }
  search_item <- paste("package", pkg, sep = ":")
  while(search_item %in% search())
  {
    detach(search_item, unload = TRUE, character.only = TRUE)
  }
}

El uso es, por ejemplo

detach_package(vegan)

o

detach_package("vegan", TRUE)
kohske
fuente
3
@hadley De hecho. La versión sin comillas no parece funcionar en la última versión de R. He actualizado la respuesta de kohske para reflejar su solución.
Ari B. Friedman
1
@ AriB.Friedman, ahora como una pregunta .
Eric Fail
1
> detach("package:MASS", unload=TRUE) Error in detach("package:MASS", unload = TRUE) : invalid 'name' argument
Mona Jalal
55
Si obtiene un error de argumento 'nombre' no válido, agregue character.only = TRUE.
Dan Tenenbaum
2
> detach ("package: kriging", unload = TRUE, character.only = T) Error en detach ("package: kriging", unload = TRUE, character.only = T): argumento de 'nombre' no válido. Sin embargo, la solución @rstober funciona.
Andrew
86

También puede usar el unloadNamespacecomando, como en:

unloadNamespace("sqldf")

La función separa el espacio de nombres antes de descargarlo.

rstober
fuente
1
En caso de que la solución de @ kohske tampoco funcionó para usted, esto funcionó para mí
Wassadamo
29

Puede desmarcar el botón de casilla de verificación en RStudio (paquetes).

Panel de paquetes RStudio

Ajay Ohri
fuente
16
Vale la pena agregar que esto da como resultado la detach("package:packageToUnload", unload=TRUE)ejecución de un comando y no es diferente de la solución ya propuesta.
Konrad
2
Además, la casilla no está marcada si el paquete se cargó usando rstudio install & restart (¿error?). Pero puedes marcarlo y desmarcarlo.
jiggunjer
9

Intenté lo que kohske escribió como respuesta y recibí un error nuevamente, así que busqué un poco y encontré esto que funcionó para mí (R 3.0.2):

require(splines) # package
detach(package:splines)

o tambien

library(splines)
pkg <- "package:splines"
detach(pkg, character.only = TRUE)
Mehrad Mahmoudian
fuente
3
¿Qué error obtienes? Porque funciona para mí (R 3.1). Y la segunda solución es la misma respuesta de @ koshke, solo sin descargar (por lo que el espacio de nombres del paquete no se descarga).
alko989
Tengo el mismo error. El punto es que di la misma solución que @Kohske pero con un nombre de paquete diferente. simplemente significa que si usa el paquete: entonces debería funcionar bien, pero si no lo usa, obtendrá el mismo error que en la pregunta. ;)
Mehrad Mahmoudian
Espera ... ¿entonces trataste de descargar un paquete que ni siquiera estaba cargado? ¿Y te sorprende que hayas tenido un error?
Gregor Thomas
@ Gregor ¿Podrías volver a leer todo antes de presionar el botón de votar hacia abajo? la función require () y library () casi hace lo mismo (al menos en este caso), ¡así que el paquete ya está cargado! No soy responsable por tu falta de información !!
Mehrad Mahmoudian
8

Cuando va de un lado a otro entre los scripts, a veces puede ser necesario descargar un paquete. Aquí hay una simple declaración IF que evitará las advertencias que aparecerían si intentara descargar un paquete que no se cargó actualmente.

if("package:vegan" %in% search()) detach("package:vegan", unload=TRUE) 

Incluir esto en la parte superior de un script puede ser útil.

Espero que te haga el día!

dca
fuente
8

detach(package:PackageName) funciona y no hay necesidad de usar comillas.

Alper Gur
fuente
3

Puede probar todo lo que desee para eliminar un paquete (y todas las dependencias que trajo consigo), unloadNamespace()pero la huella de la memoria aún persistirá. Y no, detach("package:,packageName", unload=TRUE, force = TRUE)tampoco funcionará.

Desde una nueva consola nueva o Session > Restart Rverifique la memoria con el pryrpaquete:

pryr::mem_used()

# 40.6 MB   ## This will depend on which packages are loaded obviously (can also fluctuate a bit after the decimal)

Revisa mi sessionInfo()

R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17763)

Matrix products: default

locale:
[1] LC_COLLATE=English_Canada.1252  LC_CTYPE=English_Canada.1252    LC_MONETARY=English_Canada.1252 LC_NUMERIC=C                   
[5] LC_TIME=English_Canada.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.6.1   pryr_0.1.4       magrittr_1.5     tools_3.6.1      Rcpp_1.0.3       stringi_1.4.3    codetools_0.2-16 stringr_1.4.0   
[9] packrat_0.5.0   

Carguemos el Seuratpaquete y verifiquemos la nueva huella de memoria :

library(Seurat)
pryr::mem_used()

# 172 MB    ## Likely to change in the future but just to give you an idea

Usemos unloadNamespace()para eliminar todo:

unloadNamespace("Seurat")
unloadNamespace("ape")
unloadNamespace("cluster")
unloadNamespace("cowplot")
unloadNamespace("ROCR")
unloadNamespace("gplots")
unloadNamespace("caTools")
unloadNamespace("bitops")
unloadNamespace("fitdistrplus")
unloadNamespace("RColorBrewer")
unloadNamespace("sctransform")
unloadNamespace("future.apply")
unloadNamespace("future")
unloadNamespace("plotly")
unloadNamespace("ggrepel")
unloadNamespace("ggridges")
unloadNamespace("ggplot2")
unloadNamespace("gridExtra")
unloadNamespace("gtable")
unloadNamespace("uwot")
unloadNamespace("irlba")
unloadNamespace("leiden")
unloadNamespace("reticulate")
unloadNamespace("rsvd")
unloadNamespace("survival")
unloadNamespace("Matrix")
unloadNamespace("nlme")
unloadNamespace("lmtest")
unloadNamespace("zoo")
unloadNamespace("metap")
unloadNamespace("lattice")
unloadNamespace("grid")
unloadNamespace("httr")
unloadNamespace("ica")
unloadNamespace("igraph")
unloadNamespace("irlba")
unloadNamespace("KernSmooth")
unloadNamespace("leiden")
unloadNamespace("MASS")
unloadNamespace("pbapply")
unloadNamespace("plotly")
unloadNamespace("png")
unloadNamespace("RANN")
unloadNamespace("RcppAnnoy")
unloadNamespace("tidyr")
unloadNamespace("dplyr")
unloadNamespace("tibble")
unloadNamespace("RANN")
unloadNamespace("tidyselect")
unloadNamespace("purrr")
unloadNamespace("htmlwidgets")
unloadNamespace("htmltools")
unloadNamespace("lifecycle")
unloadNamespace("pillar")
unloadNamespace("vctrs")
unloadNamespace("rlang")
unloadNamespace("Rtsne")
unloadNamespace("SDMTools")
unloadNamespace("Rdpack")
unloadNamespace("bibtex")
unloadNamespace("tsne")
unloadNamespace("backports")
unloadNamespace("R6")
unloadNamespace("lazyeval")
unloadNamespace("scales")
unloadNamespace("munsell")
unloadNamespace("colorspace")
unloadNamespace("npsurv")
unloadNamespace("compiler")
unloadNamespace("digest")
unloadNamespace("R.utils")
unloadNamespace("pkgconfig")
unloadNamespace("gbRd")
unloadNamespace("parallel")
unloadNamespace("gdata")
unloadNamespace("listenv")
unloadNamespace("crayon")
unloadNamespace("splines")
unloadNamespace("zeallot")
unloadNamespace("reshape")
unloadNamespace("glue")
unloadNamespace("lsei")
unloadNamespace("RcppParallel")
unloadNamespace("data.table")
unloadNamespace("viridisLite")
unloadNamespace("globals")

Ahora verifique sessionInfo():

R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17763)

Matrix products: default

locale:
[1] LC_COLLATE=English_Canada.1252  LC_CTYPE=English_Canada.1252    LC_MONETARY=English_Canada.1252 LC_NUMERIC=C                   
[5] LC_TIME=English_Canada.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
 [1] tools_3.6.1       stringr_1.4.0     rstudioapi_0.10   pryr_0.1.4        jsonlite_1.6      gtools_3.8.1      R.oo_1.22.0      
 [8] magrittr_1.5      Rcpp_1.0.3        R.methodsS3_1.7.1 stringi_1.4.3     plyr_1.8.4        reshape2_1.4.3    codetools_0.2-16 
[15] packrat_0.5.0     assertthat_0.2.1 

Verifique la huella de la memoria :

pryr::mem_used()

# 173 MB

Enlace a la demostración en pantalla

Matthew J. Oldach
fuente
2

Me gustaría agregar una solución alternativa. Esta solución no responde directamente a su pregunta sobre la descarga de un paquete, pero, en mi humilde opinión, proporciona una alternativa más limpia para lograr su objetivo deseado, que entiendo, está ampliamente preocupado por evitar conflictos de nombres y probar diferentes funciones, como se indicó:

principalmente porque reiniciar R cuando pruebo paquetes diferentes y conflictivos se está volviendo frustrante, pero posiblemente esto podría usarse en un programa para usar una función y luego otra, aunque la referencia de espacio de nombres es probablemente una mejor idea para ese uso

Solución

La función with_packageofrecida a través del withrpaquete ofrece la posibilidad de:

adjunte un paquete a la ruta de búsqueda, ejecute el código y luego elimine el paquete de la ruta de búsqueda. Sin embargo, el espacio de nombres del paquete no se descarga.

Ejemplo

library(withr)
with_package("ggplot2", {
  ggplot(mtcars) + geom_point(aes(wt, hp))
})
# Calling geom_point outside withr context 
exists("geom_point")
# [1] FALSE

geom_pointutilizado en el ejemplo no es accesible desde el espacio de nombres global. Creo que puede ser una forma más limpia de manejar conflictos que cargar y descargar paquetes.

Konrad
fuente
1

Tenga en cuenta también que solo puede usar unload()una vez. Si lo usa por segunda vez sin volver a ejecutar library(), obtendrá el argumento de 'nombre' no válido del mensaje de error no muy informativo :

library(vegan)
#> Loading required package: permute
#> Loading required package: lattice
#> This is vegan 2.5-6
detach("package:vegan",  unload=TRUE)
detach("package:vegan",  unload=TRUE)
#> Error in detach("package:vegan", unload = TRUE): invalid 'name' argument

Creado en 2020-05-09 por el paquete reprex (v0.3.0)

Matifou
fuente
0

Simplemente vaya a la ventana SALIDA, luego haga clic en el ícono Paquetes (se encuentra entre los íconos de Ploteo y Ayuda ). Eliminar " marca / marca de verificación " del paquete que desea descargar.

Para usar nuevamente el paquete, simplemente coloque una " marca de verificación o marca de verificación " delante del paquete o use:

library (lme4)
EsKe
fuente
1
No, a menos que tenga su propia ruta de biblioteca personalizada. No aparece en "Paquetes", por lo que debe hacer los métodos anteriores
zazu