R을 다시 시작하지 않고 패키지를 언로드하는 방법


540

R을 다시 시작하지 않고 패키지를 언로드하고 싶습니다 (주로 다른 충돌하는 패키지를 시도 할 때 R을 다시 시작하기 때문에 실망 스럽지만 프로그램에서 하나의 기능을 사용하고 다른 기능을 사용하기 위해 사용할 수 있습니다) 참조는 아마도 그 사용에 대한 더 좋은 아이디어 일 것입니다).

?library 패키지를 언로드하는 옵션은 표시하지 않습니다.

패키지를 언로드 할 수 있는 제안detach있지만 다음 두 가지 모두 실패합니다.

detach(vegan)

오류 detach(vegan): 잘못된 name인수

detach("vegan")

오류 detach("vegan"): 잘못된 name인수

패키지를 언로드하는 방법은 무엇입니까?


4
@Iterator : 라이브러리는 패키지를 찾는 위치입니다. (동의어가 아닙니다.) .libPaths()시스템의 모든 라이브러리에 대한 경로를 제공합니다.
Richie Cotton

16
@Richie : 감사합니다. 나는 R의 맥락에서,하지만 난 그 R 사용 과부하를 느끼거나 용어를 모호하게 것을 얻을 수 library두 가지 방법 : 1 - 그것은 동일한 사용 아니라 library다른 곳으로, 2 - 용어가 사용된다 library()... 부하가 아닌 라이브러리이지만 패키지입니다.
반복자

2
@Iterator 당신이 맞아요. 이것은 내가 필요로하는 답이며 인터넷 검색시 "반대 require"또는 "실행 취소 library"를 사용했습니다. 그 이유는 일반적으로로드, 음, "패키지"입니다. 따라서 제목을 올바르게 지정하면 질문이 더 정확하지만 찾기가 더 어려워집니다.
동 형사상

답변:


656

이것을 시도하십시오 ( ?detach자세한 내용은 참조) :

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

여러 버전의 패키지를 한 번에로드 할 수 있습니다 (예 : 개발 버전과 다른 라이브러리에 안정적인 버전이있는 경우). 모든 사본이 분리되도록하려면이 기능을 사용하십시오.

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)
  }
}

예를 들어 사용법

detach_package(vegan)

또는

detach_package("vegan", TRUE)

3
@hadley 실제로. 인용되지 않은 버전은 최신 버전의 R에서 작동하지 않는 것 같습니다. 솔루션을 반영하기 위해 kohske의 답변을 업데이트했습니다.
Ari B. Friedman

1
@ AriB.Friedman, 이제 질문으로 .
에릭 실패

1
> detach("package:MASS", unload=TRUE) Error in detach("package:MASS", unload = TRUE) : invalid 'name' argument
Mona Jalal

5
잘못된 'name'인수 오류가 발생하면 character.only = TRUE를 추가하십시오.
Dan Tenenbaum

2
> detach ( "package : kriging", unload = TRUE, character.only = T) detach ( "package : kriging", unload = TRUE, character.only = T) 오류 : 'name'인수가 잘못되었습니다. 그러나 @rstober 솔루션이 작동합니다!
앤드류

86

다음 unloadNamespace과 같이 명령을 사용할 수도 있습니다 .

unloadNamespace("sqldf")

이 함수는 네임 스페이스를 언로드하기 전에 분리합니다.


1
@kohske의 솔루션도 당신을 위해 작동하지 않는 경우, 이것은 나를 위해 일했다
Wassadamo

29

RStudio (패키지)에서 확인란 버튼을 선택 취소 할 수 있습니다.

RStudio 패키지 창


16
이로 인해 detach("package:packageToUnload", unload=TRUE)명령이 실행되고 이미 제안 된 솔루션
Konrad

2
또한 rstudio 설치 및 재시작 (버그?)을 사용하여 패키지를로드 한 경우 상자가 선택되지 않습니다. 하지만 확인 만하면됩니다.
jiggunjer

9

kohske가 답변으로 작성한 것을 시도하고 다시 오류가 발생하여 검색을 수행하여 저에게 도움이되는 것을 발견했습니다 (R 3.0.2).

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

또는

library(splines)
pkg <- "package:splines"
detach(pkg, character.only = TRUE)

3
어떤 오류가 발생합니까? 그것이 나를 위해 작동하기 때문에 (R 3.1). 그리고 두 번째 솔루션은 @koshke의 대답과 동일하며 언로드없이 만 가능합니다 (따라서 패키지 네임 스페이스는 언로드되지 않습니다).
alko989

같은 오류가 발생했습니다. 요점은 @Kohske와 동일한 솔루션을 제공하지만 패키지 이름이 다릅니다. 그것은 단순히 패키지를 사용하면 잘 작동한다는 것을 의미하지만, 사용하지 않으면 질문에서와 같은 오류가 발생합니다. ;)
Mehrad Mahmoudian

잠깐만 ... 그래서로드되지 않은 패키지를 언로드하려고 했습니까? 그리고 당신이 오류가 있다는 것에 놀랐습니까?
Gregor Thomas

@Gregor downvote 버튼을 누르기 전에 모든 내용을 다시 읽으시겠습니까? !!! require () 및 library () 함수는 거의 동일하므로 (이 경우 가장 이상적임) 패키지가 이미로드되었습니다 !! 나는 당신에게 정보 부족에 대해 책임을지지 않습니다 !!
Mehrad Mahmoudian

8

스크립트 사이를왔다 갔다 할 때 때때로 패키지를 언로드해야 할 수도 있습니다. 다음은 현재로드되지 않은 패키지를 언로드하려고 할 때 나타나는 경고를 방지하는 간단한 IF 문입니다.

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

스크립트 맨 위에 이것을 포함하면 도움이 될 수 있습니다.

당신의 하루가 되길 바랍니다!


8

detach(package:PackageName) 작동하며 따옴표를 사용할 필요가 없습니다.


3

패키지를 제거하려는 모든 시도 와 패키지와 함께 제공되는 모든 종속성을 시도해 볼 수 unloadNamespace()있지만 메모리 풋 프린트 는 계속 유지됩니다. 그리고 아니, detach("package:,packageName", unload=TRUE, force = TRUE)작동하지 않습니다.

새로운 콘솔에서 또는 패키지 Session > Restart R와 함께 메모리를 확인하십시오 pryr.

pryr::mem_used()

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

내 확인 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   

Seurat패키지를 로드하고 새로운 메모리 풋 프린트를 확인 하자 :

library(Seurat)
pryr::mem_used()

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

unloadNamespace()모든 것을 제거 하는 데 사용합시다 :

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")

이제 확인하십시오 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 

메모리 풋 프린트를 확인하십시오 .

pryr::mem_used()

# 173 MB

스크린 캐스트 데모 링크


2

대체 솔루션을 추가하고 싶습니다. 이 솔루션은 패키지 언로드 에 대한 귀하의 질문에 직접 대답하지는 않지만 IMHO는 원하는 목표를 달성 할 수있는 명확한 대안을 제공합니다. 명명 한 충돌을 피하고 다른 기능을 시도하는 것과 관련이 있습니다.

주로 충돌하는 다른 패키지를 시도 할 때 R을 다시 시작하기 때문에 실망 스럽지만 아마도 네임 스페이스 참조는 아마도 그 사용에 대한 더 좋은 아이디어이지만 프로그램에서 하나의 함수를 사용하고 다른 함수를 사용하는 데 사용될 수 있습니다

해결책

패키지 with_package를 통해 제공되는 기능 은 withr다음과 같은 가능성을 제공합니다.

검색 경로에 패키지를 첨부하고 코드를 실행 한 다음 검색 경로에서 패키지를 제거합니다. 그러나 패키지 네임 스페이스는 언로드 되지 않습니다 .

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

geom_point예제에서 사용 된 전역 네임 스페이스에서 액세스 할 수 없습니다. 패키지를로드 및 언로드하는 것보다 충돌을 처리하는 더 확실한 방법이라고 생각합니다.


1

또한 unload()한 번만 사용할 수 있습니다 . 다시 실행하지 않고 두 번째로 사용하면 library()유익 하지 않은 오류 메시지 유효하지 않은 'name'인수가 표시됩니다 .

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

reprex 패키지 (v0.3.0)로 2020-05-09에 작성


0

출력 창으로 이동 한 다음 패키지 아이콘 ( 플롯과 도움말 아이콘 사이에 있음)을 클릭하십시오 . 언로드 할 패키지에서 " tick / check mark "를 제거하십시오 .

패키지를 다시 사용하려면 패키지 앞에 " 틱 또는 확인 표시 "를 두거나 다음을 사용하십시오.

library (lme4)

1
고유 한 사용자 정의 라이브러리 경로가없는 한 아닙니다. "패키지"에 표시되지 않으므로 위의 방법을 수행해야합니다
zazu

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.