Enquanto tentava resolver outro problema, encontrei este problema:
Posso remover todos os objetos R:
rm(list = ls(all = TRUE))
Existe um comando equivalente que pode desanexar pacotes instalados durante a sessão de trabalho?
> 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
requer (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
Eu tentei dessa forma, embora até funcionasse em uma solução não 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
O que estou procurando é algo global como:
rm(list = ls(all = TRUE))
para objetos, espere que não remova pacotes básicos anexados
obrigado;
R CMD check
um pacote é necessário descarregar a si mesmo de forma limpa, então o R Core espera que isso seja possível e algo que se queira fazer.Respostas:
Então, alguém deveria simplesmente ter respondido o seguinte.
(editar: 6-28-19) Na versão mais recente de R 3.6.0, use.
Observe que o uso de invisível (*) não é necessário, mas pode ser útil para evitar que a resposta NULA envie spam verticalmente para a janela R.
(editar: 20/09/2019) Na versão 3.6.1
Pode ser útil primeiro converter carregados apenas
names(sessionInfo()$loadedOnly)
em pacotes anexados explicitamente e, em seguida, desanexar os pacotes.Pode-se tentar descarregar pacotes básicos via $ basePkgs e também tentar usar
unloadNamespace(loadedNamespaces())
. No entanto, eles normalmente estão repletos de erros e podem interromper a funcionalidade básica, como fazersessionInfo()
com que retornem apenas erros. Isso normalmente ocorre devido à falta de reversibilidade no design da embalagem original. AtualmentetimeDate
pode quebrar irreversivelmente, por exemplo.fonte
invisible(lapply(paste0('package:', names(sessionInfo()$otherPkgs)), detach, character.only=TRUE, unload=TRUE))
resultados em umError in FUN(X[[i]], ...) : invalid 'name' argument
erroError in FUN(X[[i]], ...)...
ocorre freqüentemente quando há apenas um valor NULL presente. Pode-se testar isso comnames(sessionInfo()$otherPkgs)
. Se voltarNULL
, então esta é a causa.Por favor, tente isto:
fonte
plyr
edplyr
parece ser o único caminho a percorrer. Obrigado!Você estava perto. Observe o que
?detach
tem a dizer sobre o primeiro argumentoname
dedetach()
:Portanto, precisamos chamar repetidamente
detach()
uma vez por elemento depkg
. Existem alguns outros argumentos que precisamos especificar para fazer isso funcionar. A primeira écharacter.only = TRUE
, que permite que a função assuma quename
é uma cadeia de caracteres - ela não funcionará sem ela. Em segundo lugar, provavelmente também queremos descarregar qualquer namespace associado. Isso pode ser alcançado definindounload = TRUE
. Portanto, a solução é, por exemplo:Aqui está um exemplo completo:
Se você quiser transformar isso em uma função, estude o código
sessionInfo()
para ver como ele identifica o que rotula como "outros pacotes anexados:". Combine esse trecho de código com a ideia acima em uma única função e você estará em casa e seco. Vou deixar isso com você.fonte
pkgs = names(sessionInfo()$otherPkgs)
epkgs = paste('package:', pkgs, sep = "")
force=TRUE
caso os pacotes tenham dependências.nothing
Pode valer a pena adicionar solução disponibilizada por Romain François . Quando carregado, o pacote
nothing
, que está atualmente disponível no GitHub , descarregará todos os pacotes carregados; como no exemplo que Romain fornece:Instalação
Com o uso do
devtools
pacote:pacman
Uma abordagem alternativa usa o
pacman
pacote disponível através do CRAN:fonte
pacman::p_unload("all")
funcione bem?Com base na resposta de Gavin, mas não totalmente para uma função completa, seria esta sequência:
fonte
lapply(paste("package:", names(sessionInfo()$otherPkgs), sep=""), detach, character.only = TRUE, unload = TRUE)
. Nunca chegaria lá sem a sua resposta!ou se você tiver RStudio, simplesmente desmarque todas as caixas marcadas na guia Pacotes para desanexar
fonte
isto irá garantir que todos os pacotes sejam separados dos seus pacotes básicos
fonte
Na maioria das vezes é o problema
plyr
vs.dplyr
Use isso no início do código:Assim, sempre que o script é executado, ele limpa o
plyr
pacotefonte
se estiver tendo problemas com pacotes que têm funções nomeadas de forma semelhante conflitantes entre si, você sempre pode fazer referência ao namespace do pacote cuja função você deseja.
fonte
Combinar bits de várias respostas deu a solução mais robusta que pude encontrar ...
fonte