【问题标题】:Unload all loaded packages卸载所有加载的包
【发布时间】:2019-04-12 15:39:08
【问题描述】:

我已经看过这个,但不能轻易找到如何去做。我试图编写一些因错误而失败的函数:

unloadNamespace(x) 中的错误: 命名空间‘graphics’由‘stats and other packages here’导入

但是,其中许多软件包甚至不在search 列表中。

[1] ".GlobalEnv"        "tools:rstudio"     "package:grDevices" "package:utils"     "package:datasets" 
[6] "package:methods"   "Autoloads"         "package:base"

这是我正在玩的函数:

lapply(gsub("package:","",search()[grep(".*(?<=package:)",search(),perl = T)]),
       function(x) unloadNamespace(x))

一个不起作用的变体:

lapply(gsub("package:","",search()[grep(".*(?<=package:)",search(),perl = T)]),
       function(x) detach(x))

问题: 我怎样才能最好地卸载几个包(如果我能全部卸载它们更好)?

【问题讨论】:

    标签: r


    【解决方案1】:

    我通常会运行这样的程序来卸载所有非基础包:

    detachAllPackages <- function() {
      basic.packages.blank <- c(    
        "stats",    
        "graphics",    
        "grDevices",    
        "utils",   
        "datasets",  
        "methods",    
        "base"    
      )    
      basic.packages <- paste("package:", basic.packages.blank, sep = "")   
      package.list <- search()[ifelse(unlist(gregexpr("package:", search())) == 1, TRUE, FALSE)]   
      package.list <- setdiff(package.list, basic.packages)   
      if (length(package.list) > 0) {   
        for (package in package.list) {   
          detach(package, character.only = TRUE)   
        }   
      }    
    }
    
    detachAllPackages()
    

    【讨论】:

      【解决方案2】:

      卸载所有非基础包的更简单解决方案:

      lapply(names(sessionInfo()$otherPkgs), function(pkgs)
        detach(
          paste0('package:', pkgs),
          character.only = T,
          unload = T,
          force = T
        ))
      

      【讨论】:

        猜你喜欢
        • 2014-08-29
        • 2016-02-25
        • 2017-07-08
        • 1970-01-01
        • 2014-05-20
        • 1970-01-01
        • 2016-11-22
        • 2011-06-09
        • 2011-12-07
        相关资源
        最近更新 更多