programing

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

telecom 2023. 7. 9. 09:47
반응형

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

저는 R을 다시 시작하지 않고 패키지를 언로드하고 싶습니다(대부분 다른 시도를 해볼 때 R을 다시 시작하면 충돌하는 패키지가 좌절감을 느끼게 되지만, 아마도 이것은 프로그램에서 한 기능을 사용하고 다른 기능을 사용하는 데 사용될 수 있을 것입니다. 네임스페이스 참조가 아마도 그 용도에 더 나은 아이디어일 것입니다.)

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

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

detach(vegan)

오류:detach(vegan)무효의name논쟁

detach("vegan")

오류:detach("vegan")무효의name논쟁

그럼 소포를 어떻게 부릅니까?

사용해 보십시오( 참조).?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)

사용할 수도 있습니다.unloadNamespace명령, 예:

unloadNamespace("sqldf")

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

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

RStudio packages pane

저는 코슈케가 답으로 쓴 것을 시도했고 다시 오류가 발생했습니다. 그래서 저는 몇 가지 검색을 했고 이것이 저에게 효과가 있다는 것을 발견했습니다(R3.0.2).

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

또는 또한

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

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

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

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

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

detach(package:PackageName)사용할 수 있으므로 따옴표를 사용할 필요가 없습니다.

또 다른 옵션은

devtools::unload("your-package")

이것은 또한 다음과 같이 제거되지 않는 등록된 S3 메소드의 문제를 처리합니다.unloadNamespace()

다음을 사용하여 패키지(및 패키지에 포함된 모든 종속성)를 제거할 수 있습니다.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

스크린캐스트 시연 링크

참로사수있것은는할용고만 할 수 .unload() 번.하지 않고 두 에는. 다 실 않 두 사 번 는 하 용 경 우 로 째 한 번 고 지 하 시 행 ▁once 경 우 는 하 용사 ▁it 한 ▁if ▁a 로 번 ▁you 다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에 생성되었습니다.

저는 다른 해결책을 추가하고 싶습니다.이 솔루션은 패키지 언로드에 대한 귀하의 질문에 직접적으로 답변하지는 않지만 IMHO는 귀하가 원하는 목표를 달성하기 위한 보다 깨끗한 대안을 제공합니다. 제가 알기로는, 다음과 같이 이름 충돌을 피하고 다양한 기능을 시도하는 것이 광범위하게 관련되어 있습니다.

대부분은 제가 다르게 시도할 때 R을 다시 시작하는 것이 좌절감을 주기 때문입니다. 하지만 아마도 이것은 프로그램에서 한 기능을 사용하고 다른 기능을 사용하는 데 사용될 수 있을 것입니다. 네임스페이스 참조가 아마도 그 용도에 더 나은 아이디어일 것입니다.

해결책

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

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

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이 예제에서 사용된 항목은 글로벌 네임스페이스에서 액세스할 수 없습니다.짐을 싣고 내리는 것보다 갈등을 해결하는 더 깨끗한 방법일 수도 있다고 생각합니다.

OUTPUT 창으로 이동한 다음 Packages 아이콘(Plot 아이콘과 Help 아이콘 사이에 있음)을 클릭합니다.언로드할 패키지에서 "체크 표시/체크 표시"를 제거합니다.

패키지를 다시 사용하려면 패키지 앞에 "체크 표시 또는 확인 표시"를 붙이거나 다음을 사용합니다.

library (lme4)

@tjebo 답변과 연결됩니다.

TL;DR
이해주요를 사용해 .pkgload:::unloaddevtools::unload한 기능(1과 동일한 기능(1:1)이기 pkgload훨씬 가벼운 패키지(의존성 nr)입니다. devtools 순히수출다것하는시을단ing▁theexport를 다시 내보냅니다.pkgload:::unload기능.

도 불하게도행.devtools의존성이 매우 큽니다(와 같이).devtools많은 자체 종속성이 있음), 이는 더 많은 개발 단계를 대상으로 합니다.그래서 만약 당신이 그것을 사용하고 싶다면.unload하거나 라이브러리 크기에 이 있는 에는 당신자패키서기능나당거신다있크습니관심이를 사용하는 하십시오. 사용하는 것을 기억하세요.pkgload:::unloaddevtools::unload.devtools 순히수출다것하는시을단ing▁theexport를 다시 내보냅니다.pkgload:::unload기능.

의바을확시오십인의 .devtools::unload신속하게 report를 확인하거나 github repo로 이동하는 기능

> devtools::unload
function (package = pkg_name(), quiet = FALSE) 
{
    if (package == "compiler") {
        oldEnable <- compiler::enableJIT(0)
        if (oldEnable != 0) {
            warning("JIT automatically disabled when unloading the compiler.")
        }
    }
    if (!package %in% loadedNamespaces()) {
        stop("Package ", package, " not found in loaded packages or namespaces")
    }
    unregister_methods(package)
    unloaded <- tryCatch({
        unloadNamespace(package)
        TRUE
    }, error = function(e) FALSE)
    if (!unloaded) {
        unload_pkg_env(package)
        unregister_namespace(package)
    }
    clear_cache()
    unload_dll(package)
}
<bytecode: 0x11a763280>
<environment: namespace:pkgload>

언급URL : https://stackoverflow.com/questions/6979917/how-to-unload-a-package-without-restarting-r

반응형