【问题标题】:Programmatically get list of base packages以编程方式获取基础包列表
【发布时间】:2021-07-04 04:06:07
【问题描述】:

如何让 R 列出其基本安装包。 Dirk 给出了HERE 的列表,但我怎样才能让 R 告诉我这些信息,即 src/library/ 中的包?

getOption("defaultPackages") 很接近,但只列出了其中一些包。

【问题讨论】:

  • getOption("defaultPackages") 实际上正是我想要的,谢谢!这只是 R 在启动时加载的包。
  • 小心 c(getOption("defaultPackages"), "base") 是 R 在启动时加载的内容。在下面检查我的答案。

标签: r


【解决方案1】:
rownames(installed.packages(priority="base"))
 [1] "base"      "compiler"  "datasets"  "graphics"  "grDevices" "grid"     
 [7] "methods"   "parallel"  "splines"   "stats"     "stats4"    "tcltk"    
[13] "tools"     "utils"    

【讨论】:

    【解决方案2】:

    TL;DR.

    • rownames(installed.packages(priority = "base")) R.Version() 的所有基础包。
    • c(getOption("defaultPackages"), "base") 是 R 在启动时加载的内容

    installed.packages 将返回您当前安装的软件包。
    每个特定 R 版本 (R.Version()) 的基础包总是相同的。这个列表将来可能会随着更新的 R 版本而改变。例如。我记得parallel 的添加时间比其他R `parallel` package does not exist on CRAN? 晚。

    getOption("defaultPackages") 是 R 在启动时加载的内容,尽管 base 包不计算在内。
    我发现sessionInfo()$basePkgs 解决方案对于启动包更健壮,因为它也包含base 包。然而sessionInfo()$basePkgs 的效率相对较低,因为它是一个简单的遍历所有DESCRIPTION 文件的循环。

    microbenchmark::microbenchmark(sessionInfo()$basePkgs,
                                   getOption("defaultPackages"))
    Unit: nanoseconds
                             expr     min      lq       mean  median      uq      max neval
           sessionInfo()$basePkgs 6172017 6242209 6673759.42 6294546 6848292 16656578   100
     getOption("defaultPackages")     205     246     526.85     451     656     1722   100
    

    【讨论】:

      【解决方案3】:

      可能有一个更简单的方法,但我认为这应该可以解决问题:

      installed.packages()[grep('^base$', installed.packages()[, 'Priority']), ]
      

      【讨论】:

      • 谢谢。为了简单起见,我更喜欢@Josh +1
      • 当然——我没有看 installed.packages 的参数,@Josh 的更清晰。
      猜你喜欢
      • 1970-01-01
      • 2015-11-20
      • 2013-09-28
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多