miniCRAN离线安装R的依赖库

R的极客理想系列文章,涵盖了R的思想,使用,龙虎大战坐庄工具 ,创新等的一系列要点,以龙虎大战坐庄我 个人的学习和体验去诠释R的强大。

R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,龙虎大战坐庄互联网 ….都在使用R语言。

要成为有理想的极客,龙虎大战坐庄龙虎大战坐庄我 们 不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域。让龙虎大战坐庄龙虎大战坐庄我 们 一起动起来吧,开始R的极客理想。

龙虎大战坐庄关于 作者:

  • 张丹(Conan), 程序员Java,R,Nodejs
  • weibo:@Conan_Z
  • blog: http://cnc77.com
  • email: bsspirit@gmail.com

转载请注明出处:
http://cnc77.com/r-install-offline

前言

最近经常去有网络隔离的机构,每次安装R语言的环境都是特别痛苦的经历。物理网络完全隔绝,不能通过龙虎大战坐庄互联网 进行R语言的安装,只能预先龙虎大战坐庄下载 所有龙虎大战坐庄软件 ,再进行安装。

对于有众多依赖的库,安装过程就变得很复杂了。无意中,发现了一个可以找到每个包的依赖包的库miniCRAN,让这个安装包过程,变得自动化一点。

目录

  1. 离线安装R的依赖库的过程
  2. miniCRAN介绍
  3. 5分钟上手
  4. miniCRAN包的函数介绍
  5. miniCRAN的使用龙虎大战坐庄方法

1. 离线安装R的依赖库的过程

对于物理网络完全被隔绝的情况,龙虎大战坐庄龙虎大战坐庄我 们 不能通过龙虎大战坐庄互联网 进行R语言的安装,只能预先龙虎大战坐庄下载 所有龙虎大战坐庄软件 ,再进行安装。

操作过程包括以下几步操作:

  1. 在有网的环境中,龙虎大战坐庄下载 系统龙虎大战坐庄软件 ,比例 龙虎大战坐庄Win dows环境要龙虎大战坐庄下载 对应的.net framework。
  2. 在有网的环境中,龙虎大战坐庄下载 R语言龙虎大战坐庄软件 。
  3. 在有网的环境中,龙虎大战坐庄下载 第三方龙虎大战坐庄软件 包,比如xts包。
  4. 在有网的环境中,用miniCRAN找到xts包,所有的依赖包。
  5. 在有网的环境中,龙虎大战坐庄下载 所有的依赖包。
  6. 通过U盘或者其他的方式,复制到无网的环境中。
  7. 分别安装系统龙虎大战坐庄软件 ,R语言龙虎大战坐庄软件 ,依赖包,龙虎大战坐庄软件 包。
  8. 重复以上过程,直到把龙虎大战坐庄软件 都安装好。

以上操作过程中,最复杂的操作就在于找到所有的依赖包。

2. miniCRAN介绍

miniCRAN包,主要用于发现龙虎大战坐庄软件 包的依赖关系。R语言中,每个包一般都其所依赖的扩展包,对于龙虎大战坐庄企业 或者机构内网来说,由于防火墙或者基于安全的管理规则,不允许从龙虎大战坐庄互联网 龙虎大战坐庄下载 安装。那么,用户就需要从CRAN中,龙虎大战坐庄下载 对应的龙虎大战坐庄软件 包,一个一个安装。通过miniCRAN包,可以递归读取这些龙虎大战坐庄软件 包的依赖关系,然后就可以龙虎大战坐庄下载 这些依赖包了。

开发环境所使用的系统环境

  • 龙虎大战坐庄Win 10 64bit
  • R: 3.2.3 x86_64-w64-mingw32/x64 b4bit

miniCRAN包的安装比较简单,直接用install.pacakges()函数就行。


> install.packages("miniCRAN")
         binary source needs_compilation
miniCRAN  0.2.7 0.2.11             FALSE

installing the source package 'miniCRAN'

URLhttp://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib/miniCRAN_0.2.11.tar.gz'
Content type 'application/octet-stream' length 4114313 bytes (3.9 MB)
downloaded 3.9 MB

* installing *source* package 'miniCRAN' ...
** 'miniCRAN'MD5
** R
** data
*** moving datasets to lazyload DB
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded
*** arch - i386
*** arch - x64
* DONE (miniCRAN)

3. 5分钟上手

龙虎大战坐庄龙虎大战坐庄我 们 先做一个小的测试,分析一下chron包如果龙虎大战坐庄本地 安装,都需要使用哪些包,会有哪些依赖关系。龙虎大战坐庄龙虎大战坐庄我 们 打开CRAN上面的,官方项目网页,https://cran.r-project.org/web/packages/xts/

xts唯一强依赖的包(depends)是zoo,引用R系统包methods,同时建议安装timeSeries, timeDate, tSeries, chron, fts, tis, RUnit包。

接下来,龙虎大战坐庄龙虎大战坐庄我 们 通过miniCRAN找到xts包的依赖关系。


> library(miniCRAN)
> tags <- "xts"
> pkgDep(tags, availPkgs = cranJuly2014)
 [1] "xts"          "zoo"          "lattice"     
 [4] "timeDate"     "quadprog"     "Hmisc"       
 [7] "survival"     "Formula"      "latticeExtra"
[10] "cluster"      "RColorBrewer" "BH"          
[13] "timeSeries"   "tseries"      "its"         
[16] "chron"        "fts"          "tis"    

画出依赖关系图。


> dg <- makeDepGraph(tags, enhances = TRUE, availPkgs = cranJuly2014)
> plot(dg, legendPosition = c(-1, 1), vertex.size = 20)

从图中,可以把整个的依赖关系看得很清楚了。

4. miniCRAN包的函数介绍

整个miniCRAN包大概有20多个函数,其中最有用的函数就是pkgDeg()和pkgAvail()。

4.1 pkgDeg()函数

pkgDeg()函数,主要对Depends,Imports和LinkLibrary执行递归检索,对Suggests执行非递归检索。


pkgDep(pkg, availPkgs, repos = getOption("repos"), type = "source",
  depends = TRUE, suggests = TRUE, enhances = FALSE,
  includeBasePkgs = FALSE, Rversion = R.version, quiet = FALSE, ...)

参数解读:

  • pkg: 包名
  • availPkgs: 所有包列表
  • repos: CRAN龙虎大战坐庄软件 源
  • type: 龙虎大战坐庄下载 类型,源代或二进制
  • depends: 依赖关系,包括Depends, Imports, LinkingTo
  • suggests: 建议关系
  • enhances: 增强关系
  • includeBasePkgs: 是否包括R base包
  • Rversion: R版本

4.2 pkgAvail()函数

pkgAvail()函数,是对 available.packages()函数的一个封装。如果提供了参数路径,那么该函数将尝试从龙虎大战坐庄本地 存储库读取数据,否则尝试从repos url的CRAN镜像读取数据。


pkgAvail(repos = getOption("repos"), type = "source",
  Rversion = R.version, quiet = FALSE)

参数解读:

  • repos: CRAN龙虎大战坐庄软件 源
  • type: 龙虎大战坐庄下载 类型,源代或二进制
  • Rversion: R版本

这个函数在龙虎大战坐庄我 目前测试的版本中,有一些bug,可以用available.packages()函数来解决。

5. miniCRAN的使用龙虎大战坐庄方法

接下来,龙虎大战坐庄龙虎大战坐庄我 们 详细地介绍一下,找到某包的依赖的使用龙虎大战坐庄方法 。

5.1 定义龙虎大战坐庄软件 源

如果龙虎大战坐庄龙虎大战坐庄我 们 用install.packages()函数安装过龙虎大战坐庄软件 包,在龙虎大战坐庄你 的龙虎大战坐庄本地 配置中,会有当前的龙虎大战坐庄软件 源,那么龙虎大战坐庄龙虎大战坐庄我 们 可以用getOption()函数,来获得龙虎大战坐庄本地 的龙虎大战坐庄软件 源。


> repos<-getOption("repos")
> repos
                                        CRAN 
"https://mirrors.tuna.tsinghua.edu.cn/CRAN/" 
                                   CRANextra 
        "http://www.stats.ox.ac.uk/pub/R龙虎大战坐庄Win
" 
attr(,"RStudio")
[1] TRUE

龙虎大战坐庄我 当前环境中配置的CRAN龙虎大战坐庄软件 源为 https://mirrors.tuna.tsinghua.edu.cn/CRAN/ 。

5.2 获得龙虎大战坐庄软件 源的包列表

通过龙虎大战坐庄软件 源URL,龙虎大战坐庄龙虎大战坐庄我 们 需要获得龙虎大战坐庄软件 源的包列表。


> curl<-contrib.url(repos)
> aps<-available.packages(curl)

> head(aps)
            Package       Version Priority Depends                                               Imports                                  LinkingTo
A3          "A3"          "1.0.0" NA       "R (>= 2.15.0), xtable, pbapply"                      NA                                       NA       
abbyyR      "abbyyR"      "0.5.1" NA       "R (>= 3.2.0)"                                        "httr, XML, curl, readr, plyr, progress" NA       
abc         "abc"         "2.1"   NA       "R (>= 2.10), abc.data, nnet, quantreg, MASS, locfit" NA                                       NA       
ABCanalysis "ABCanalysis" "1.2.1" NA       "R (>= 2.10)"                                         "plotrix"                                NA       
abc.data    "abc.data"    "1.0"   NA       "R (>= 2.10)"                                         NA                                       NA       
abcdeFBA    "abcdeFBA"    "0.4"   NA       "Rglpk,rgl,corrplot,lattice,R (>= 2.10)"              NA                                       NA       
            Suggests                               Enhances License              License_is_FOSS License_restricts_use OS_type Archs MD5sum
A3          "randomForest, e1071"                  NA       "GPL (>= 2)"         NA              NA                    NA      NA    NA    
abbyyR      "testthat, rmarkdown, knitr (>= 1.11)" NA       "MIT + file LICENSE" NA              NA                    NA      NA    NA    
abc         NA                                     NA       "GPL (>= 3)"         NA              NA                    NA      NA    NA    
ABCanalysis NA                                     NA       "GPL-3"              NA              NA                    NA      NA    NA    
abc.data    NA                                     NA       "GPL (>= 3)"         NA              NA                    NA      NA    NA    
abcdeFBA    "LIM,sybil"                            NA       "GPL-2"              NA              NA                    NA      NA    NA    
            NeedsCompilation File Repository                                             
A3          "no"             NA   "https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib"
abbyyR      "no"             NA   "https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib"
abc         "no"             NA   "https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib"
ABCanalysis "no"             NA   "https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib"
abc.data    "no"             NA   "https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib"
abcdeFBA    "no"             NA   "https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib"

取出xts包所对应的配置信息。


> aps[which(row.names(aps)=='xts'),]
                                                Package                                                 Version 
                                                  "xts"                                                "0.10-2" 
                                               Priority                                                 Depends 
                                                     NA                                       "zoo (>= 1.7-12)" 
                                                Imports                                               LinkingTo 
                                              "methods"                                                   "zoo" 
                                               Suggests                                                Enhances 
"timeSeries, timeDate, tseries, chron, fts, tis, RUnit"                                                      NA 
                                                License                                         License_is_FOSS 
                                           "GPL (>= 2)"                                                      NA 
                                  License_restricts_use                                                 OS_type 
                                                     NA                                                      NA 
                                                  Archs                                                  MD5sum 
                                                     NA                                                      NA 
                                       NeedsCompilation                                                    File 
                                                  "yes"                                                      NA 
                                             Repository 
"https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib" 

5.3 找到依赖包的列表

从所有的龙虎大战坐庄软件 包中,找到对应龙虎大战坐庄软件 依赖包的列表。


# 要找到xts和TTR龙虎大战坐庄软件
的依赖包
> libs<-c("xts","TTR")
> pkgList<-pkgDep(pkg=libs,availPkgs=aps,repos=repos)
> pkgList
 [1] "xts"        "TTR"        "zoo"        "lattice"    "curl"       "timeDate"   "quadprog"  
 [8] "quantmod"   "BH"         "timeSeries" "tseries"    "chron"      "fts"        "tis"       
[15] "RUnit"     

5.4 龙虎大战坐庄下载 所有依赖包

运行龙虎大战坐庄下载 函数,龙虎大战坐庄下载 所有的依赖包。


> dp<-download.packages(pkgList,"D:/workspace/R/miniCRAN/pgk",type=getOption("pkgType"))
> dp
      [,1]         [,2]                                                    
 [1,] "xts"        "D:/workspace/R/miniCRAN/pgk/xts_0.10-2.tar.gz"         
 [2,] "TTR"        "D:/workspace/R/miniCRAN/pgk/TTR_0.23-3.tar.gz"         
 [3,] "zoo"        "D:/workspace/R/miniCRAN/pgk/zoo_1.8-1.tar.gz"          
 [4,] "lattice"    "D:/workspace/R/miniCRAN/pgk/lattice_0.20-35.tar.gz"    
 [5,] "curl"       "D:/workspace/R/miniCRAN/pgk/curl_3.2.tar.gz"           
 [6,] "timeDate"   "D:/workspace/R/miniCRAN/pgk/timeDate_3043.102.tar.gz"  
 [7,] "quadprog"   "D:/workspace/R/miniCRAN/pgk/quadprog_1.5-5.tar.gz"     
 [8,] "quantmod"   "D:/workspace/R/miniCRAN/pgk/quantmod_0.4-13.tar.gz"    
 [9,] "BH"         "D:/workspace/R/miniCRAN/pgk/BH_1.66.0-1.tar.gz"        
[10,] "timeSeries" "D:/workspace/R/miniCRAN/pgk/timeSeries_3042.102.tar.gz"
[11,] "tseries"    "D:/workspace/R/miniCRAN/pgk/tseries_0.10-44.tar.gz"    
[12,] "chron"      "D:/workspace/R/miniCRAN/pgk/chron_2.3-52.tar.gz"       
[13,] "fts"        "D:/workspace/R/miniCRAN/pgk/fts_0.9.9.tar.gz"          
[14,] "tis"        "D:/workspace/R/miniCRAN/pgk/tis_1.34.tar.gz"           
[15,] "RUnit"      "D:/workspace/R/miniCRAN/pgk/RUnit_0.4.31.tar.gz"       

龙虎大战坐庄本地 目录查看龙虎大战坐庄下载 的文件。


> dir("D:/workspace/R/miniCRAN/pgk")
 [1] "BH_1.66.0-1.tar.gz"         "chron_2.3-52.tar.gz"        "curl_3.2.tar.gz"           
 [4] "fts_0.9.9.tar.gz"           "lattice_0.20-35.tar.gz"     "quadprog_1.5-5.tar.gz"     
 [7] "quantmod_0.4-13.tar.gz"     "RUnit_0.4.31.tar.gz"        "timeDate_3043.102.tar.gz"  
[10] "timeSeries_3042.102.tar.gz" "tis_1.34.tar.gz"            "tseries_0.10-44.tar.gz"    
[13] "TTR_0.23-3.tar.gz"          "xts_0.10-2.tar.gz"          "zoo_1.8-1.tar.gz"  

5.5 安装龙虎大战坐庄软件 包

用R语言的函数,进行龙虎大战坐庄本地 安装。


> install.packages(dp[,2], repos = NULL, type="source")

另外,龙虎大战坐庄龙虎大战坐庄我 们 也可以用命令行,进行安装。


> R CMD INSTALL D:\workspace\R\miniCRAN\pgk\zoo_1.8-1.tar.gz

通过使用miniCRAN包,就让龙虎大战坐庄龙虎大战坐庄我 们 找到依赖包的这事情,变得简单多了。再通过批量的离线龙虎大战坐庄下载 ,和批量的安装,就可以让龙虎大战坐庄龙虎大战坐庄我 们 的操作更有效率。不然,一个一包的安装,真是要把人给逼疯了!

虽然本文讲了通用的龙虎大战坐庄方法 ,但对于有一些包安装过程中,还需要从网上再龙虎大战坐庄下载 其他的包,还需要具体问题具体分析,手动安装依赖包的过程,确实是无比复杂的。

转载请注明出处:
http://cnc77.com/r-install-offline

打赏作者

This entry was posted in R语言实践