Mientras trabajaba para resolver otro problema, tuve este problema:
Puedo eliminar todos los objetos R por:
rm(list = ls(all = TRUE))
¿Existe un comando equivalente que pueda separar los paquetes instalados durante la sesión de trabajo?
> 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
require (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
Intenté de esta manera, aunque incluso funcionó en una solución no 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
Lo que estoy buscando es algo global como:
rm(list = ls(all = TRUE))
para los objetos, espere que no elimine los paquetes base adjuntos
Gracias;
R CMD check
Se supone que pasar un paquete se descarga limpiamente, por lo que R Core espera que esto sea posible y algo que uno podría desear hacer.Respuestas:
Entonces, alguien debería haber respondido simplemente lo siguiente.
(edit: 6-28-19) En la última versión de R 3.6.0, utilice en su lugar.
Tenga en cuenta que el uso de invisible (*) no es necesario, pero puede ser útil para evitar que la respuesta NULL envíe spam verticalmente a la ventana R.
(editar: 20/9/2019) En la versión 3.6.1
Puede ser útil convertir
names(sessionInfo()$loadedOnly)
primero los paquetes cargados en paquetes adjuntos explícitamente y, luego, separarlos.Uno puede intentar descargar paquetes base a través de $ basePkgs y también intentar usar
unloadNamespace(loadedNamespaces())
. Sin embargo, estos suelen estar plagados de errores y podrían romper la funcionalidad básica, como provocarsessionInfo()
que se devuelvan solo errores. Esto suele ocurrir debido a la falta de reversibilidad en el diseño del paquete original. ActualmentetimeDate
puede romperse de forma irreversible, por ejemplo.fuente
invisible(lapply(paste0('package:', names(sessionInfo()$otherPkgs)), detach, character.only=TRUE, unload=TRUE))
resultados en unError in FUN(X[[i]], ...) : invalid 'name' argument
errorError in FUN(X[[i]], ...)...
ocurre con frecuencia cuando solo hay un valor NULL presente. Uno puede probar esto connames(sessionInfo()$otherPkgs)
. Si regresaNULL
, entonces esta es la causa.Por favor intente esto:
fuente
plyr
ydplyr
parezca el único camino a seguir. ¡Gracias!Estabas cerca. Tenga en cuenta lo que
?detach
tiene que decir sobre el primer argumentoname
dedetach()
:Por lo que debemos llamar repetidamente
detach()
una vez por elemento depkg
. Hay un par de otros argumentos que debemos especificar para que esto funcione. La primera escharacter.only = TRUE
, que permite que la función asuma quename
es una cadena de caracteres; no funcionará sin ella. En segundo lugar, probablemente también queramos descargar cualquier espacio de nombres asociado. Esto se puede lograr configurandounload = TRUE
. Entonces la solución es, por ejemplo:Aquí hay un ejemplo completo:
Si desea convertir esto en una función, estudie el código
sessionInfo()
para ver cómo identifica lo que etiqueta como "otros paquetes adjuntos:". Combine ese fragmento de código con la idea anterior en una sola función y estará en casa y seco. Sin embargo, te dejaré esa parte a ti.fuente
pkgs = names(sessionInfo()$otherPkgs)
ypkgs = paste('package:', pkgs, sep = "")
force=TRUE
en caso de que los paquetes tengan dependencias.nothing
Puede que valga la pena agregar una solución proporcionada por Romain François . Cuando se carga, el paquete
nothing
, que actualmente está disponible en GitHub , descargará todos los paquetes cargados; como en el ejemplo que ofrece Romain:Instalación
Con el uso del
devtools
paquete:pacman
Un enfoque alternativo utiliza el
pacman
paquete disponible a través de CRAN:fuente
pacman::p_unload("all")
funcionaría también?Sobre la base de la respuesta de Gavin, pero no del todo a una función completa, estaría esta secuencia:
fuente
lapply(paste("package:", names(sessionInfo()$otherPkgs), sep=""), detach, character.only = TRUE, unload = TRUE)
. ¡Sin embargo, nunca llegaría allí sin tu respuesta!o si tiene RStudio, simplemente desmarque todas las casillas marcadas en la pestaña Paquetes para separar
fuente
esto asegurará que todos los paquetes se separen, aparte de los paquetes básicos
fuente
La mayoría de las veces es el problema
plyr
vs.dplyr
Use esto al principio del código:Entonces, cada vez que se ejecuta el script, borra el
plyr
paquetefuente
Si tiene problemas con paquetes que tienen funciones con nombres similares en conflicto entre sí, siempre puede hacer referencia al espacio de nombres del paquete cuya función SÍ desea.
fuente
La combinación de bits de varias respuestas dio la solución más sólida que pude encontrar ...
fuente