【问题标题】:Possible to extract R packages installed from CRAN and Github, separately?可以分别提取从 CRAN 和 Github 安装的 R 包吗?
【发布时间】:2015-09-09 09:27:04
【问题描述】:

我从CRANGitHub 安装了很多R 软件包,我想知道如何只提取从CRAN 安装的那些软件包,或者只提取从GitHub 安装的那些软件包?

installed.packages() 没有列出我可以使用的任何变量,据我所知...

【问题讨论】:

  • 您确定您要进行的安装不需要来自 CRAN 和 GitHub 的软件包吗?
  • @TimBiegeleisen 好吧,IT 团队只要求我从 CRAN 安装包,并表示这些包将比 GitHub 上的包进行更彻底的测试,可能有错误。我试图以编程方式提取从 CRAN 安装的所有软件包...

标签: r cran


【解决方案1】:
packages <- installed.packages()[,1]

packages.keep <- sapply(packages, function(x) {
                                     url <- packageDescription(x)$URL
                                     if (length(grep("github", x = url)) == 0) {
                                        return(FALSE)
                                     }
                                     else {
                                        return(TRUE)
                                     }
                                  })

packages[packages.keep]

> packages[packages.keep]
           curl      data.table             DBI        devtools           dplyr 
         "curl"    "data.table"           "DBI"      "devtools"         "dplyr" 
       evaluate        forecast         ggplot2           git2r       gridExtra 
     "evaluate"      "forecast"       "ggplot2"         "git2r"     "gridExtra" 
          Hmisc            httr           mailR         memoise            mime 
        "Hmisc"          "httr"         "mailR"       "memoise"          "mime" 
           plyr            R.oo         R.utils              R6            Rcpp 
         "plyr"          "R.oo"       "R.utils"            "R6"          "Rcpp" 
  RcppArmadillo        reshape2        roxygen2         RSQLite       rversions 
"RcppArmadillo"      "reshape2"      "roxygen2"       "RSQLite"     "rversions" 
         scales         whisker 
       "scales"       "whisker"

为了验证这个结果,这里是 ggplot2 包的 URL 信息:

URL: http://ggplot2.org, https://github.com/hadley/ggplot2

很明显,这个包部分来自 GitHub,它应该出现在列表中。如果你想使用不是来自 GitHub 的包,你可以轻松修改我的代码。

【讨论】:

    【解决方案2】:

    我会尝试类似:

    local <- as.character(installed.packages()[,1])
    mirror <- as.character(available.packages()[,1])
    local[!(local %in% mirror)]
    

    更细化:

    local <- installed.packages()[,c(1,3)]
    mirror <- available.packages()[,c(1,2)]
    dif.install <- local[!(local[,1] %in% mirror[,1]),]
    same.install <- local[(local[,1] %in% mirror[,1]),]
    dif.version <- same.install[!(same.install[,2] %in% mirror[,2]),]
    out <- merge(dif.version, mirror[(mirror[,1] %in% dif.version[,1]),], by = "Package")
    colnames(out) <- c("Package", "Other", "CRAN")
    out
    

    为我的安装提供:

         Package     Other  CRAN
    1 data.table     1.9.5 1.9.4
    2 manipulate 0.98.1103 1.0.1
    3      Zelig     5.0-5 4.2-1
    

    【讨论】:

    • 这不会区分从 GitHub 下载的包和不是从 GitHub 下载的包。
    • @TimBiegeleisen 是的,让我有时间完善
    • @Pascal 也感谢你!我当然很感激向你学习
    猜你喜欢
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 2020-01-06
    • 2021-10-23
    相关资源
    最近更新 更多