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 checkSe 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. ActualmentetimeDatepuede 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' argumenterrorError 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
plyrydplyrparezca el único camino a seguir. ¡Gracias!Estabas cerca. Tenga en cuenta lo que
?detachtiene que decir sobre el primer argumentonamededetach():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 quenamees 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=TRUEen caso de que los paquetes tengan dependencias.nothingPuede 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
devtoolspaquete:pacmanUn enfoque alternativo utiliza el
pacmanpaquete 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
plyrvs.dplyrUse esto al principio del código:Entonces, cada vez que se ejecuta el script, borra el
plyrpaquetefuente
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