From 83021b87bd33d2b33acd9d4d035ffbfdca1829a4 Mon Sep 17 00:00:00 2001 From: Alex Chubaty Date: Wed, 15 Nov 2017 10:53:24 -0700 Subject: [PATCH 01/11] bump dev version --- DESCRIPTION | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 807ebfc..7400fa9 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -12,8 +12,8 @@ Description: Makes it possible to create an internally consistent subset. The user can then install packages from this repository directly, rather than from CRAN. This is useful in production settings, e.g. server behind a firewall, or remote locations with slow (or zero) Internet access. -Date: 2017-10-21 -Version: 0.2.10 +Date: 2017-11-15 +Version: 0.2.10.9000 URL: https://github.com/andrie/miniCRAN BugReports: https://github.com/andrie/miniCRAN/issues SystemRequirements: Imports the `curl` and `XML` packages. These have system From 503c5e41e617c5554f2e99025a65aed71455997e Mon Sep 17 00:00:00 2001 From: Alex Chubaty Date: Wed, 15 Nov 2017 10:53:40 -0700 Subject: [PATCH 02/11] minor cleanup --- tests/testthat/test-1-pkgAvail.R | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/tests/testthat/test-1-pkgAvail.R b/tests/testthat/test-1-pkgAvail.R index fdac386..f94c9e6 100644 --- a/tests/testthat/test-1-pkgAvail.R +++ b/tests/testthat/test-1-pkgAvail.R @@ -1,15 +1,14 @@ context("pkgAvail") test_that("pkgAvail throws warnings and errors for incorrect CRAN repos", { - expect_warning(pkgAvail(repos="")) + expect_warning(pkgAvail(repos = "")) - - is.available.packages <- function(x){ - all(is.matrix(x), dim(x)[2] == 17, names(x)[1:3] == c("Package", "Version","Priority", "Depends")) + is.available.packages <- function(x) { + all(is.matrix(x), dim(x)[2] == 17, names(x)[1:3] == c("Package", "Version", "Priority", "Depends")) } skip_if_offline(MRAN()) - + expect_true(is.available.packages( pkgAvail(repos = unname(MRAN())) )) @@ -17,7 +16,6 @@ test_that("pkgAvail throws warnings and errors for incorrect CRAN repos", { pkgAvail(repos = MRAN()) )) expect_true(is.available.packages( - pkgAvail(repos=c(CRAN="@CRAN@")) + pkgAvail(repos = c(CRAN = "@CRAN@")) )) - -}) \ No newline at end of file +}) From 7a7342246d975df3fc6f92aa789df61c8793845f Mon Sep 17 00:00:00 2001 From: Alex Chubaty Date: Wed, 15 Nov 2017 10:56:32 -0700 Subject: [PATCH 03/11] use new url for MRAN (fix #104) use cran.microsoft.com instead of mran.microsoft.com for MRAN url --- NEWS | 15 ++++++++++++++- R/zzz.R | 4 ++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 58fae4a..b32550a 100644 --- a/NEWS +++ b/NEWS @@ -1,7 +1,20 @@ +miniCRAN v0.2.10.9000 +===================== + +New features: +* NULL + +Bug fixes: +* use cran.microsoft.com instead of mran.microsoft.com for MRAN url (#104) + +Other improvements: +* NULL + + miniCRAN v0.2.10 (Release date: 2017-10-21) ================ -New features: +New features: * Added package option `minicran.mran` which sets default preferred MRAN url (#72) Bug fixes: diff --git a/R/zzz.R b/R/zzz.R index 77d760e..3f1d057 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -3,9 +3,9 @@ .onLoad <- function(libname, pkgname) { mran.url <- if (getRversion() >= "3.2.2") { - "https://mran.microsoft.com" ## use HTTPS + "https://cran.microsoft.com" ## use HTTPS } else { - "http://mran.microsoft.com" ## use HTTP + "http://cran.microsoft.com" ## use HTTP } ## set options using the approach used by devtools From 6bc93386b0f67350c5aa5f03f55e8ef80b644253 Mon Sep 17 00:00:00 2001 From: Alex Chubaty Date: Fri, 17 Nov 2017 10:22:20 -0700 Subject: [PATCH 04/11] travis osx: use newer version of xcode see https://docs.travis-ci.com/user/reference/osx/#OS-X-Version I'm trying with version 9 instead of 8 (latest is 9.1) --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index f511ac7..ef66c18 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,9 +23,9 @@ matrix: r: devel - os: osx - osx_image: xcode8 + osx_image: xcode9 latex: false - + r_build_args: '--no-build-vignettes' r_check_args: '--as-cran --ignore-vignettes --no-examples' @@ -39,7 +39,7 @@ notifications: email: on_success: change on_failure: change - + after_success: - test $TRAVIS_R_VERSION_STRING = "release" && Rscript -e 'withr::with_envvar(c(NOT_CRAN="true"), {covr::codecov()})' From 4071d25392c09ca9b55e100be3e8eb4431458888 Mon Sep 17 00:00:00 2001 From: Alex Chubaty Date: Fri, 17 Nov 2017 10:28:13 -0700 Subject: [PATCH 05/11] minor code formatting tweaks in intro vignette --- inst/doc/miniCRAN-introduction.rmd | 40 +++++++++++++++--------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/inst/doc/miniCRAN-introduction.rmd b/inst/doc/miniCRAN-introduction.rmd index f983f50..e52d405 100644 --- a/inst/doc/miniCRAN-introduction.rmd +++ b/inst/doc/miniCRAN-introduction.rmd @@ -24,11 +24,11 @@ Start by creating the dependency list: library("miniCRAN") # use Revolution Analytics CRAN mirror -revolution <- c(CRAN="http://cran.microsoft.com") +revolution <- c(CRAN = "http://cran.microsoft.com") # Specify list of packages to download pkgs <- c("foreach") -pkgList <- pkgDep(pkgs, repos=revolution, type="source", suggests = FALSE, availPkgs = cranJuly2014) +pkgList <- pkgDep(pkgs, repos = revolution, type = "source", suggests = FALSE, availPkgs = cranJuly2014) pkgList ``` @@ -39,7 +39,7 @@ Next, create a repository with the function `makeRepo()`. In this example, get dir.create(pth <- file.path(tempdir(), "miniCRAN")) # Make repo for source and win.binary -makeRepo(pkgList, path=pth, repos=revolution, type=c("source", "win.binary")) +makeRepo(pkgList, path = pth, repos = revolution, type = c("source", "win.binary")) ``` @@ -47,7 +47,7 @@ Investigate the repository file structure: ```{r make-repo-3, eval=FALSE} # List all files in miniCRAN -list.files(pth, recursive=TRUE, full.names=FALSE) +list.files(pth, recursive = TRUE, full.names = FALSE) ``` @@ -55,7 +55,7 @@ Use `pkgAvail` to list available packages in your repository: ```{r make-repo-4, eval=FALSE} # Check for available packages -pkgAvail(repos=pth, type="win.binary")[, c(1:3, 5)] +pkgAvail(repos = pth, type = "win.binary")[, c(1:3, 5)] ``` # Install packages from your local repository @@ -77,8 +77,8 @@ After creating a local miniCRAN repository, additional packages and their depend ```{r addto-repo-new-1, eval=FALSE} # Add new packages (from CRAN) to the miniCRAN repo -addPackage("Matrix", path=pth, repos=revolution, type=c("source", "win.binary")) -pkgAvail(repos=pth, type="win.binary")[, c(1:3, 5)] +addPackage("Matrix", path = pth, repos = revolution, type = c("source", "win.binary")) +pkgAvail(repos = pth, type = "win.binary")[, c(1:3, 5)] ``` The value that is returned (invisibly) via `addPackage` is the number of packages written to the index file, *i.e.*, the total number of packages in the repo of that type. @@ -91,12 +91,12 @@ To add a specific version of a package from CRAN (or another CRAN-like repositor ```{r addto-repo-old-1, eval=FALSE} # create a data frame with the package and version info -oldVers <- data.frame(package=c("foreach", "codetools", "iterators"), - version=c("1.4.0", "0.2-7", "1.0.5"), - stringsAsFactors=FALSE) +oldVers <- data.frame(package = c("foreach", "codetools", "iterators"), + version = c("1.4.0", "0.2-7", "1.0.5"), + stringsAsFactors = FALSE) # download old source package version and create repo index -addOldPackage(pkgList, path=pth, vers=oldVers$version, repos=revolution, type="source") +addOldPackage(pkgList, path = pth, vers = oldVers$version, repos = revolution, type = "source") ``` You will get a warning whenever there are multiple versions of a package saved in the repository. Currently, you need to manually remove duplicate versions before rebuilding the repository's package index. @@ -105,8 +105,8 @@ Note: This last step is important, otherwise you may end up with a repo in an in ```{r addto-repo-old-2, eval=FALSE} # List package versions in the miniCRAN repo (produces warning about duplicates) -pkgVersionsSrc <- checkVersions(pkgList, path=pth, type="source") -pkgVersionsBin <- checkVersions(pkgList, path=pth, type="win.binary") +pkgVersionsSrc <- checkVersions(pkgList, path = pth, type = "source") +pkgVersionsBin <- checkVersions(pkgList, path = pth, type = "win.binary") # After inspecting package versions, remove old versions basename(pkgVersionsSrc) # duplicate versions @@ -115,14 +115,14 @@ basename(pkgVersionsBin) file.remove(pkgVersionsSrc[c(2,4,6)]) # rebuild the package index after removing duplicate package versions -updateRepoIndex(pth, type=c("source", "win.binary")) +updateRepoIndex(pth, type = c("source", "win.binary")) ``` To see the updated list of packages available in the miniCRAN repo: ```{r addto-repo-old-3, eval=FALSE} -pkgAvail(pth, type="source")[, c(1:3, 5)] # contains the old versions -pkgAvail(pth, type="win.binary")[, c(1:3, 5)] # contains the current versions +pkgAvail(pth, type = "source")[, c(1:3, 5)] # contains the old versions +pkgAvail(pth, type = "win.binary")[, c(1:3, 5)] # contains the current versions ``` @@ -138,8 +138,8 @@ Checking for updated versions of the packages currently stored in the miniCRAN r ```{r update-repo-1, eval=FALSE} # Check if updated packages are available -oldPackages(path=pth, repos=revolution, type="source")[, 1:3] # should need update -oldPackages(path=pth, repos=revolution, type="win.binary")[, 1:3] # should be current +oldPackages(path = pth, repos = revolution, type = "source")[, 1:3] # should need update +oldPackages(path = pth, repos = revolution, type = "win.binary")[, 1:3] # should be current ``` @@ -147,8 +147,8 @@ Update the versions of the packages currently stored in the miniCRAN repository. ```{r update-repo-2, eval=FALSE} # Update available packages -updatePackages(path=pth, repos=revolution, type="source", ask=FALSE) # should need update -updatePackages(path=pth, repos=revolution, type="win.binary", ask=FALSE) # should be current +updatePackages(path = pth, repos = revolution, type = "source", ask = FALSE) # should need update +updatePackages(path = pth, repos = revolution, type = "win.binary", ask = FALSE) # should be current ``` From cd3bdaf4fe85ca56a3a63c3ade21c99fa65d2bcd Mon Sep 17 00:00:00 2001 From: Alex Chubaty Date: Fri, 17 Nov 2017 13:23:26 -0700 Subject: [PATCH 06/11] split tests to avoid travis-ci timeout errors suggested by http://randyzwitch.com/travisci-10minute-timeout-build-error/ --- tests/test-1-pkgAvail.R | 4 ++++ tests/test-2-pkgDep.R | 4 ++++ tests/test-3&4-makeRepo.R | 4 ++++ tests/test-5-updateRepo.R | 4 ++++ tests/test-6-getCranDescription.R | 4 ++++ tests/test-7-add-GithubPackage.R | 4 ++++ tests/test-all.R | 3 --- 7 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 tests/test-1-pkgAvail.R create mode 100644 tests/test-2-pkgDep.R create mode 100644 tests/test-3&4-makeRepo.R create mode 100644 tests/test-5-updateRepo.R create mode 100644 tests/test-6-getCranDescription.R create mode 100644 tests/test-7-add-GithubPackage.R delete mode 100644 tests/test-all.R diff --git a/tests/test-1-pkgAvail.R b/tests/test-1-pkgAvail.R new file mode 100644 index 0000000..8595e06 --- /dev/null +++ b/tests/test-1-pkgAvail.R @@ -0,0 +1,4 @@ +if (require(testthat)) { + source(file.path("testthat", "helpers.R")) + test_check("miniCRAN", filter = "pkgAvail") +} diff --git a/tests/test-2-pkgDep.R b/tests/test-2-pkgDep.R new file mode 100644 index 0000000..f6194ef --- /dev/null +++ b/tests/test-2-pkgDep.R @@ -0,0 +1,4 @@ +if (require(testthat)) { + source(file.path("testthat", "helpers.R")) + test_check("miniCRAN", filter = "pkgDep") +} diff --git a/tests/test-3&4-makeRepo.R b/tests/test-3&4-makeRepo.R new file mode 100644 index 0000000..87b219a --- /dev/null +++ b/tests/test-3&4-makeRepo.R @@ -0,0 +1,4 @@ +if (require(testthat)) { + source(file.path("testthat", "helpers.R")) + test_check("miniCRAN", filter = "makeRepo") +} diff --git a/tests/test-5-updateRepo.R b/tests/test-5-updateRepo.R new file mode 100644 index 0000000..282da49 --- /dev/null +++ b/tests/test-5-updateRepo.R @@ -0,0 +1,4 @@ +if (require(testthat)) { + source(file.path("testthat", "helpers.R")) + test_check("miniCRAN", filter = "updateRepo") +} diff --git a/tests/test-6-getCranDescription.R b/tests/test-6-getCranDescription.R new file mode 100644 index 0000000..58c027d --- /dev/null +++ b/tests/test-6-getCranDescription.R @@ -0,0 +1,4 @@ +if (require(testthat)) { + source(file.path("testthat", "helpers.R")) + test_check("miniCRAN", filter = "getCranDescription") +} diff --git a/tests/test-7-add-GithubPackage.R b/tests/test-7-add-GithubPackage.R new file mode 100644 index 0000000..1f08477 --- /dev/null +++ b/tests/test-7-add-GithubPackage.R @@ -0,0 +1,4 @@ +if (require(testthat)) { + source(file.path("testthat", "helpers.R")) + test_check("miniCRAN", filter = "addGithubPackage") +} diff --git a/tests/test-all.R b/tests/test-all.R deleted file mode 100644 index 60f9b5a..0000000 --- a/tests/test-all.R +++ /dev/null @@ -1,3 +0,0 @@ -if(require(testthat)) { - test_check("miniCRAN") -} \ No newline at end of file From e9fdfe098a6008a6a7533d90b3636a9263514a27 Mon Sep 17 00:00:00 2001 From: Alex Chubaty Date: Fri, 17 Nov 2017 13:37:35 -0700 Subject: [PATCH 07/11] run travis checks on split-test branch --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index ef66c18..867033b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,6 +34,7 @@ branches: - master - release - dev + - split-tests notifications: email: From b0b3751de7ac3d78b84ec51efb23ea74ac55af06 Mon Sep 17 00:00:00 2001 From: Alex Chubaty Date: Fri, 17 Nov 2017 13:37:35 -0700 Subject: [PATCH 08/11] Revert "run travis checks on split-test branch" This reverts commit e9fdfe098a6008a6a7533d90b3636a9263514a27. --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 867033b..ef66c18 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,7 +34,6 @@ branches: - master - release - dev - - split-tests notifications: email: From b937ba0f632f5fae99e719629f6d71e8001d40fb Mon Sep 17 00:00:00 2001 From: Alex Chubaty Date: Fri, 17 Nov 2017 14:31:08 -0700 Subject: [PATCH 09/11] only run coverage checks on travis linux r-release coverage checks take too long on macOS, causing timeout error --- .travis.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index ef66c18..ec50946 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,6 +17,8 @@ matrix: - os: linux dist: trusty r: release + after_success: + - Rscript -e 'withr::with_envvar(c(NOT_CRAN="true"), {covr::codecov()})' - os: linux dist: trusty @@ -39,7 +41,3 @@ notifications: email: on_success: change on_failure: change - -after_success: - - test $TRAVIS_R_VERSION_STRING = "release" && Rscript -e 'withr::with_envvar(c(NOT_CRAN="true"), {covr::codecov()})' - From 3118ba70aa6eb418844264f0a644250e8410e978 Mon Sep 17 00:00:00 2001 From: Andrie de Vries Date: Tue, 19 Dec 2017 10:31:51 +0000 Subject: [PATCH 10/11] Code formatting --- .Rbuildignore | 2 + DESCRIPTION | 4 +- NEWS | 8 + README.md | 36 +- inst/doc/miniCRAN-dependency-graph.html | 352 +++---------------- inst/doc/miniCRAN-dependency-graph.rmd | 5 +- inst/doc/miniCRAN-introduction.R | 41 ++- inst/doc/miniCRAN-introduction.html | 442 ++++++------------------ inst/doc/miniCRAN-introduction.rmd | 20 +- inst/doc/miniCRAN-non-CRAN-repos.R | 8 +- inst/doc/miniCRAN-non-CRAN-repos.html | 378 ++++---------------- inst/doc/miniCRAN-non-CRAN-repos.rmd | 15 +- vignettes/miniCRAN-dependency-graph.rmd | 5 +- vignettes/miniCRAN-introduction.rmd | 48 +-- vignettes/miniCRAN-non-CRAN-repos.rmd | 15 +- 15 files changed, 326 insertions(+), 1053 deletions(-) diff --git a/.Rbuildignore b/.Rbuildignore index 6ab23bf..ee70507 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -3,3 +3,5 @@ LICENSE.md .travis.yml ^.*\.Rproj$ ^\.Rproj\.user$ +^docs$ +^_pkgdown\.yml$ diff --git a/DESCRIPTION b/DESCRIPTION index 7400fa9..adebac7 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -12,8 +12,8 @@ Description: Makes it possible to create an internally consistent subset. The user can then install packages from this repository directly, rather than from CRAN. This is useful in production settings, e.g. server behind a firewall, or remote locations with slow (or zero) Internet access. -Date: 2017-11-15 -Version: 0.2.10.9000 +Date: 2017-12-19 +Version: 0.2.11.9000 URL: https://github.com/andrie/miniCRAN BugReports: https://github.com/andrie/miniCRAN/issues SystemRequirements: Imports the `curl` and `XML` packages. These have system diff --git a/NEWS b/NEWS index b32550a..ee43d11 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,11 @@ +miniCRAN v0.2.11.9000 (Release date: in development) +================ + +New features: + +* Used `pkgdown` to build documentation site + + miniCRAN v0.2.10.9000 ===================== diff --git a/README.md b/README.md index 643ed88..22c49ed 100644 --- a/README.md +++ b/README.md @@ -11,16 +11,18 @@ Create a mini version of CRAN containing only selected packages ## Introduction -At the end of 2014, CRAN consisted of more than 6,000 packages. Many organisations need to maintain a private mirror of CRAN, but with only a subset of packages that are relevant to them. +At the end of 2014, CRAN consisted of more than 6,000 packages. By then end of 2017, the number of packages doubled to more than 12,000. Many organisations need to maintain a private mirror of CRAN, but with only a subset of packages that are relevant to them. -`miniCRAN` makes it possible to create an internally consistent repository consisting of selected packages from CRAN-like repositories. The user specifies a set of desired packages, and miniCRAN recursively reads the dependency tree for these packages, then downloads only this subset. +The `miniCRAN` package makes it possible to create an internally consistent repository consisting of selected packages from CRAN-like repositories. The user specifies a set of desired packages, and `miniCRAN` recursively reads the dependency tree for these packages, then downloads only this subset. ## Important functions: -* Find package dependencies: `pkgDep()` -* Make repository (with or without downloading packages): `makeRepo()` -* Add additonal packages (and their dependencies) to existing repository: `addPackage()` -* Update the versions of packages currently in the repository: `updatePackages()` +Function | Use it for +-------------- | ------------------------------------------ +`pkgDep()` | Find package dependencies +`makeRepo()` | Make repository (with or without downloading packages) +`addPackage()` | Add additonal packages (and their dependencies) to existing repository +`updatePackages()` | Update the versions of packages currently in the repository ## Installation: @@ -33,7 +35,7 @@ library("miniCRAN") ### Development version -Get the latest stable development version from github: +Get the latest development version from github: ```r # Use `devtools` to install directly from github @@ -43,19 +45,19 @@ install_github("andrie/miniCRAN") ### System requirements -The `miniCRAN` package itself doesn't introduce any system dependencies. However, the package imports [`curl`](https://cran.r-project.org/package=curl) and `XML` packages. These have system requirements on `libxml2-devel`, `libcurl-devel` and `openssl-devel`. +The `miniCRAN` package itself doesn't introduce any system dependencies. However, the package imports the [`curl`](https://cran.r-project.org/package=curl) and [`XML`](https://cran.r-project.org/package=XML) packages. These have system requirements on `libxml2-devel`, `libcurl-devel` and `openssl-devel`. -On systems with the `rpm` package manager (Red Hat, CentOS) try: +* On systems with the `rpm` package manager (Red Hat, CentOS) try: -```bash -yum install libcurl-devel libxml2-devel openssl-devel -``` + ```sh + yum install libcurl-devel libxml2-devel openssl-devel + ``` -On systems with the `aptitude` package manager (Debian, Ubuntu) try: +* On systems with the `aptitude` package manager (Debian, Ubuntu) try: -```bash -apt-get install libcurl4-openssl-dev libxml2-devel openssl-devel -``` + ```sh + apt-get install libcurl4-openssl-dev libxml2-devel openssl-devel + ``` ## Example: @@ -65,7 +67,7 @@ apt-get install libcurl4-openssl-dev libxml2-devel openssl-devel library("miniCRAN") pkgs <- c("ggplot2", "plyr", "reshape2") -makeRepo(pkgDep(pkgs), path=file.path(tempdir(), "miniCRAN"), download=TRUE) +makeRepo(pkgDep(pkgs), path = file.path(tempdir(), "miniCRAN")) ``` ## Supported by Microsoft diff --git a/inst/doc/miniCRAN-dependency-graph.html b/inst/doc/miniCRAN-dependency-graph.html index ac50e16..dff8732 100644 --- a/inst/doc/miniCRAN-dependency-graph.html +++ b/inst/doc/miniCRAN-dependency-graph.html @@ -8,297 +8,71 @@ + - + Using miniCRAN to identify package dependencies - - - - - - - - - - - - + - - - - -
- - - - - - - - - - - - -

The miniCRAN package exposes two functions that provide information about dependencies:

    @@ -311,7 +85,7 @@

    October 21, 2017

  • chron Suggests the packages scales and ggplot2. This means that chron uses some functions from these packages in examples or in its vignettes. However, these functions are not necessary to use chron

  • chron Enhances the package zoo, meaning that it adds something to zoo packages. These enhancements are made available to you if you have zoo installed.

-
+

A worked example using the package chron

The function pkgDep() exposes not only these dependencies, but also all recursive dependencies. In other words, it answers the question which packages need to be installed to satisfy all dependencies of dependencies.

This means that the algorithm is as follows:

@@ -320,25 +94,25 @@

A worked example using the package chron

  • Next, perform a recursive search for all Imports, Depends and LinkingTo
  • The resulting list of packages should then contain the complete list necessary to satisfy all dependencies. In code:

    -
    library("miniCRAN")
    -
    tags <- "chron"
    -pkgDep(tags, availPkgs = cranJuly2014)
    +
    library("miniCRAN")
    +
    tags <- "chron"
    +pkgDep(tags, availPkgs = cranJuly2014)
    ##  [1] "chron"        "RColorBrewer" "dichromat"    "munsell"     
     ##  [5] "plyr"         "labeling"     "colorspace"   "Rcpp"        
     ##  [9] "digest"       "gtable"       "reshape2"     "scales"      
     ## [13] "proto"        "MASS"         "stringr"      "ggplot2"

    To create an igraph plot of the dependencies, use the function makeDepGraph() and plot the results:

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

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

    Note how the dependencies expand to zoo (enhanced), scales and ggplot (suggested) and then recursively from there to get all the Imports and LinkingTo dependencies.

    -
    -
    +
    +

    An example with multiple input packages

    As a final example, create a dependency graph of seven very popular R packages:

    -
    tags <- c("ggplot2", "data.table", "plyr", "knitr", "shiny", "xts", "lattice")
    -pkgDep(tags, suggests = TRUE, enhances = FALSE, availPkgs = cranJuly2014)
    +
    tags <- c("ggplot2", "data.table", "plyr", "knitr", "shiny", "xts", "lattice")
    +pkgDep(tags, suggests = TRUE, enhances = FALSE, availPkgs = cranJuly2014)
    ##  [1] "ggplot2"      "data.table"   "plyr"         "knitr"       
     ##  [5] "shiny"        "xts"          "lattice"      "digest"      
     ##  [9] "gtable"       "reshape2"     "scales"       "proto"       
    @@ -359,30 +133,14 @@ 

    An example with multiple input packages

    ## [69] "rgl" "XML" "RCurl" "Cairo" ## [73] "timeSeries" "tseries" "its" "fts" ## [77] "tis" "KernSmooth"
    -
    dg <- makeDepGraph(tags, enhances = TRUE, availPkgs = cranJuly2014)
    -set.seed(1)
    -plot(dg, legendPosition = c(-1, -1), vertex.size = 10, cex = 0.7)
    -

    - - - - - +
    dg <- makeDepGraph(tags, enhances = TRUE, availPkgs = cranJuly2014)
    +set.seed(1)
    +plot(dg, legendPosition = c(-1, -1), vertex.size = 10, cex = 0.7)
    +

    - - - - - - - - - - - - - + - - - - -
    - - - - - - - - - - - - -

    Start by creating the recursive dependency tree for your target packages.

    For example, imagine a scenario where you want to create a repository that consists of the package foreach and its dependencies.

    Start by creating the dependency list:

    -
    library("miniCRAN")
    +
    library("miniCRAN")
     
    -# use Revolution Analytics CRAN mirror
    -revolution <- c(CRAN="http://cran.microsoft.com")
    +# use Revolution Analytics CRAN mirror
    +revolution <- c(CRAN = "http://cran.microsoft.com")
     
    -# Specify list of packages to download
    -pkgs <- c("foreach")
    -pkgList <- pkgDep(pkgs, repos=revolution, type="source", suggests = FALSE, availPkgs = cranJuly2014)
    -pkgList
    +# Specify list of packages to download +pkgs <- c("foreach") +pkgList <- pkgDep(pkgs, repos = revolution, type = "source", suggests = FALSE, + availPkgs = cranJuly2014) +pkgList
    ## [1] "foreach"   "codetools" "iterators"

    Next, create a repository with the function makeRepo(). In this example, get the required files for source packages as well as windows binaries:

    -
    # Create temporary folder for miniCRAN
    -dir.create(pth <- file.path(tempdir(), "miniCRAN"))
    +
    # Create temporary folder for miniCRAN
    +dir.create(pth <- file.path(tempdir(), "miniCRAN"))
     
    -# Make repo for source and win.binary
    -makeRepo(pkgList, path=pth, repos=revolution, type=c("source", "win.binary"))
    +# Make repo for source and win.binary +makeRepo(pkgList, path=pth, repos=revolution, type=c("source", "win.binary"))

    Investigate the repository file structure:

    -
    # List all files in miniCRAN
    -list.files(pth, recursive=TRUE, full.names=FALSE)
    +
    # List all files in miniCRAN
    +list.files(pth, recursive = TRUE, full.names = FALSE)

    Use pkgAvail to list available packages in your repository:

    -
    # Check for available packages
    -pkgAvail(repos=pth, type="win.binary")[, c(1:3, 5)]
    -
    +
    # Check for available packages
    +pkgAvail(repos = pth, type = "win.binary")[, c(1:3, 5)]
    +

    Install packages from your local repository

    To install packages from a local repository, you need to use the URI convention file:/// to point to your file lcoation.

    -
    install.packages(pkgs, 
    -                 repos = paste0("file:///", pth),
    -                 type = "source")
    -
    -
    +
    install.packages(pkgs, 
    +                 repos = paste0("file:///", pth),
    +                 type = "source")
    + +

    Adding packages to an existing miniCRAN repository

    -
    +

    Adding new packages from CRAN

    After creating a local miniCRAN repository, additional packages and their dependencies can easily be added. This mechanism can also be used to re-add an existing package to the miniCRAN repo.

    -
    # Add new packages (from CRAN) to the miniCRAN repo
    -addPackage("Matrix", path=pth, repos=revolution, type=c("source", "win.binary"))
    -pkgAvail(repos=pth, type="win.binary")[, c(1:3, 5)]
    +
    # Add new packages (from CRAN) to the miniCRAN repo
    +addPackage("Matrix", path = pth, repos = revolution, type = c("source", "win.binary"))
    +pkgAvail(repos = pth, type = "win.binary")[, c(1:3, 5)]

    The value that is returned (invisibly) via addPackage is the number of packages written to the index file, i.e., the total number of packages in the repo of that type.

    -
    -
    +
    +

    Adding an older version of a package from CRAN

    To add a specific version of a package from CRAN (or another CRAN-like repository), we can easily download the source packages from the CRAN archives. Dependencies for old package versions cannot be determined automatically and must be specified by the user.

    Note: in order to to add binaries of older packages, you will need to download the source and build the binaries on the intended platform yourself. You will need the appropriate R development tools installed in order to build package binaries from source.

    -
    # create a data frame with the package and version info
    -oldVers <- data.frame(package=c("foreach", "codetools", "iterators"),
    -                      version=c("1.4.0", "0.2-7", "1.0.5"),
    -                      stringsAsFactors=FALSE)
    -
    -# download old source package version and create repo index
    -addOldPackage(pkgList, path=pth, vers=oldVers$version, repos=revolution, type="source")
    +
    # create a data frame with the package and version info
    +oldVers <- data.frame(
    +  package = c("foreach", "codetools", "iterators"),
    +  version = c("1.4.0", "0.2-7", "1.0.5"),
    +  stringsAsFactors = FALSE
    +)
    +
    +# download old source package version and create repo index
    +addOldPackage(pkgList, path = pth, vers = oldVers$version, repos = revolution, type = "source")

    You will get a warning whenever there are multiple versions of a package saved in the repository. Currently, you need to manually remove duplicate versions before rebuilding the repository’s package index.

    Note: This last step is important, otherwise you may end up with a repo in an inconsistent state.

    -
    # List package versions in the miniCRAN repo (produces warning about duplicates)
    -pkgVersionsSrc <- checkVersions(pkgList, path=pth, type="source")
    -pkgVersionsBin <- checkVersions(pkgList, path=pth, type="win.binary")
    +
    # List package versions in the miniCRAN repo (produces warning about duplicates)
    +pkgVersionsSrc <- checkVersions(pkgList, path = pth, type = "source")
    +pkgVersionsBin <- checkVersions(pkgList, path = pth, type = "win.binary")
     
    -# After inspecting package versions, remove old versions
    -basename(pkgVersionsSrc) # duplicate versions
    -basename(pkgVersionsBin)
    +# After inspecting package versions, remove old versions
    +basename(pkgVersionsSrc) # duplicate versions
    +basename(pkgVersionsBin)
     
    -file.remove(pkgVersionsSrc[c(2,4,6)])
    +file.remove(pkgVersionsSrc[c(2,4,6)])
     
    -# rebuild the package index after removing duplicate package versions
    -updateRepoIndex(pth, type=c("source", "win.binary"))
    +# rebuild the package index after removing duplicate package versions +updateRepoIndex(pth, type = c("source", "win.binary"))

    To see the updated list of packages available in the miniCRAN repo:

    -
    pkgAvail(pth, type="source")[, c(1:3, 5)] # contains the old versions
    -pkgAvail(pth, type="win.binary")[, c(1:3, 5)] # contains the current versions
    -
    -
    +
    pkgAvail(pth, type = "source")[, c(1:3, 5)] # contains the old versions
    +pkgAvail(pth, type = "win.binary")[, c(1:3, 5)] # contains the current versions
    + +

    Adding packages from other sources

    This feature will be implemented in a future release.

    -
    - -
    + + +

    Updating the packages in a miniCRAN repository

    Checking for updated versions of the packages currently stored in the miniCRAN repository:

    -
    # Check if updated packages are available
    -oldPackages(path=pth, repos=revolution, type="source")[, 1:3] # should need update
    -oldPackages(path=pth, repos=revolution, type="win.binary")[, 1:3] # should be current
    -

    Update the versions of the packages currently stored in the miniCRAN repository. By default, a prompt is given to confirm the update for each package. This prompt can be suppressed using ask=FALSE, which will update all packages. Be careful using this option if you want to keep certain packages at an older version.

    -
    # Update available packages
    -updatePackages(path=pth, repos=revolution, type="source", ask=FALSE) # should need update
    -updatePackages(path=pth, repos=revolution, type="win.binary", ask=FALSE) # should be current
    -
    - - - - +
    # Check if updated packages are available
    +oldPackages(path = pth, repos = revolution, type = "source")[, 1:3] # should need update
    +oldPackages(path = pth, repos = revolution, type = "win.binary")[, 1:3] # should be current
    +

    Update the versions of the packages currently stored in the miniCRAN repository. By default, a prompt is given to confirm the update for each package. This prompt can be suppressed using ask = FALSE, which will update all packages. Be careful using this option if you want to keep certain packages at an older version.

    +
    # Update available packages
    +updatePackages(path = pth, repos = revolution, type = "source", ask = FALSE) # should need update
    +updatePackages(path = pth, repos = revolution, type = "win.binary", ask = FALSE) # should be current
    - - - - - - - - - - - - - + - - - - -
    - - - - - - - - - - - - -

    Although the package name miniCRAN seems to indicate you can only use CRAN as a repository, you can in fact use any CRAN-like repository.

    This vignette contains some examples of how to refer to different package repositories, including CRAN, alternative mirrors of CRAN, R-Forge as well as BioConductor.

    To simplify the code to show the salient features, we use a little helper function, index() that is a simple wrapper around available.packages():

    -
    # Wrapper around available.packages ---------------------------------------
    +
    # Wrapper around available.packages ---------------------------------------
      
    -index <- function(url, type="source", filters=NULL, head=5, cols=c("Package", "Version")){
    -  contribUrl <- contrib.url(url, type=type)
    -  p <- available.packages(contribUrl, type=type, filters=filters)
    -  p[1:head, cols]
    -}
    -
    +index <- function(url, type = "source", filters = NULL, head = 5, cols = c("Package", "Version")){ + contribUrl <- contrib.url(url, type = type) + p <- available.packages(contribUrl, type = type, filters = filters) + p[1:head, cols] +}
    +

    Using CRAN

    The URL for the master mirror in Austria:

    -
    CRAN <- "http://cran.r-project.org"
    -index(CRAN)
    - -
    +
    CRAN <- "http://cran.r-project.org"
    +index(CRAN)
    +
    +

    Using a different mirror

    You can also point to any other mirror, for example the stable version hosted by Revolution Analytics:

    -
    revoStable <- "http://packages.revolutionanalytics.com/cran/3.1/stable"
    -index(revoStable)
    +
    revoStable <- "http://packages.revolutionanalytics.com/cran/3.1/stable"
    +index(revoStable)
      
    -revoMirror <- "http://cran.revolutionanalytics.com"
    -index(revoMirror)
    - -
    +revoMirror <- "http://cran.revolutionanalytics.com" +index(revoMirror)
    + +

    Using R-forge

    R-forge has CRAN-like structure:

    -
    rforge <- "http://r-forge.r-project.org"
    -index(rforge)
    - -
    +
    rforge <- "http://r-forge.r-project.org"
    +index(rforge)
    +
    +

    Using BioConductor

    Although BioConductor has a different preferred install mechanism, the underlying repository structure is also CRAN-like:

    -
    bioc <- local({
    -  env <- new.env()
    -  on.exit(rm(env))
    -  evalq(source("http://bioconductor.org/biocLite.R", local=TRUE), env)
    -  biocinstallRepos()
    +
    bioc <- local({
    +  env <- new.env()
    +  on.exit(rm(env))
    +  evalq(source("http://bioconductor.org/biocLite.R", local = TRUE), env)
    +  biocinstallRepos()
     })
      
     bioc
    -bioc[grep("BioC", names(bioc))]
    +bioc[grep("BioC", names(bioc))]
      
      
    -index(bioc["BioCsoft"])
    - - - - - +index(bioc["BioCsoft"])
    - - + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + + + + + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/articles/miniCRAN-dependency-graph.html b/docs/articles/miniCRAN-dependency-graph.html new file mode 100644 index 0000000..a3f5dc0 --- /dev/null +++ b/docs/articles/miniCRAN-dependency-graph.html @@ -0,0 +1,183 @@ + + + + + + + +Using miniCRAN to identify package dependencies • miniCRAN + + + + + + +
    +
    + + + +
    +
    + + + + +
    +

    The miniCRAN package exposes two functions that provide information about dependencies:

    +
      +
    • The function pkgDep() returns a character vector with the names of dependencies. Internally, pkgDep() is a wrapper around tools::package_dependencies(), a base R function that, well, tells you about package dependencies. My pkgDep() function is in one way a convenience, but more importantly it sets different defaults (more about this later).

    • +
    • The function makeDepGraph() creates a graph representation of the dependencies.

    • +
    +

    The package chron neatly illustrates the different roles of Imports, Suggests and Enhances:

    +
      +
    • chron Imports the base packages graphics and stats. This means that chron internally makes use of graphics and stats and will always load these packages.

    • +
    • chron Suggests the packages scales and ggplot2. This means that chron uses some functions from these packages in examples or in its vignettes. However, these functions are not necessary to use chron

    • +
    • chron Enhances the package zoo, meaning that it adds something to zoo packages. These enhancements are made available to you if you have zoo installed.

    • +
    +
    +

    +A worked example using the package chron

    +

    The function pkgDep() exposes not only these dependencies, but also all recursive dependencies. In other words, it answers the question which packages need to be installed to satisfy all dependencies of dependencies.

    +

    This means that the algorithm is as follows:

    +
      +
    • First retrieve a list of Suggests and Enhances, using a non-recursive dependency search
    • +
    • Next, perform a recursive search for all Imports, Depends and LinkingTo
    • +
    +

    The resulting list of packages should then contain the complete list necessary to satisfy all dependencies. In code:

    +
    library("miniCRAN")
    +
    tags <- "chron"
    +pkgDep(tags, availPkgs = cranJuly2014)
    +
    ##  [1] "chron"        "RColorBrewer" "dichromat"    "munsell"     
    +##  [5] "plyr"         "labeling"     "colorspace"   "Rcpp"        
    +##  [9] "digest"       "gtable"       "reshape2"     "scales"      
    +## [13] "proto"        "MASS"         "stringr"      "ggplot2"
    +

    To create an igraph plot of the dependencies, use the function makeDepGraph() and plot the results:

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

    +

    Note how the dependencies expand to zoo (enhanced), scales and ggplot (suggested) and then recursively from there to get all the Imports and LinkingTo dependencies.

    +
    +
    +

    +An example with multiple input packages

    +

    As a final example, create a dependency graph of seven very popular R packages:

    +
    tags <- c("ggplot2", "data.table", "plyr", "knitr", "shiny", "xts", "lattice")
    +pkgDep(tags, suggests = TRUE, enhances = FALSE, availPkgs = cranJuly2014)
    +
    ##  [1] "ggplot2"      "data.table"   "plyr"         "knitr"       
    +##  [5] "shiny"        "xts"          "lattice"      "digest"      
    +##  [9] "gtable"       "reshape2"     "scales"       "proto"       
    +## [13] "MASS"         "Rcpp"         "stringr"      "RColorBrewer"
    +## [17] "dichromat"    "munsell"      "labeling"     "colorspace"  
    +## [21] "evaluate"     "formatR"      "highr"        "markdown"    
    +## [25] "mime"         "httpuv"       "caTools"      "RJSONIO"     
    +## [29] "xtable"       "htmltools"    "bitops"       "zoo"         
    +## [33] "SparseM"      "survival"     "Formula"      "latticeExtra"
    +## [37] "cluster"      "maps"         "sp"           "foreign"     
    +## [41] "mvtnorm"      "TH.data"      "sandwich"     "nlme"        
    +## [45] "Matrix"       "bit"          "codetools"    "iterators"   
    +## [49] "timeDate"     "quadprog"     "Hmisc"        "BH"          
    +## [53] "quantreg"     "mapproj"      "hexbin"       "maptools"    
    +## [57] "multcomp"     "testthat"     "mgcv"         "chron"       
    +## [61] "reshape"      "fastmatch"    "bit64"        "abind"       
    +## [65] "foreach"      "doMC"         "itertools"    "testit"      
    +## [69] "rgl"          "XML"          "RCurl"        "Cairo"       
    +## [73] "timeSeries"   "tseries"      "its"          "fts"         
    +## [77] "tis"          "KernSmooth"
    +
    dg <- makeDepGraph(tags, enhances = TRUE, availPkgs = cranJuly2014)
    +set.seed(1)
    +plot(dg, legendPosition = c(-1, -1), vertex.size = 10, cex = 0.7)
    +

    +
    +
    +
    + + + +
    + + +
    + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/articles/miniCRAN-dependency-graph_files/figure-html/makeDepGraph-1.png b/docs/articles/miniCRAN-dependency-graph_files/figure-html/makeDepGraph-1.png new file mode 100644 index 0000000000000000000000000000000000000000..9edb0ce0876c90d79c861bc87063f7a42e010407 GIT binary patch literal 21181 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 GjK2ZL`Hq4B literal 0 HcmV?d00001 diff --git a/docs/articles/miniCRAN-dependency-graph_files/figure-html/so-tags-1.png b/docs/articles/miniCRAN-dependency-graph_files/figure-html/so-tags-1.png new file mode 100644 index 0000000000000000000000000000000000000000..25408052099482a6c6e04661fcdb565ffb5d7f28 GIT binary patch literal 104602 zcmeFZXH=8#_BI&BAD~igNEZY_X;MQ+ks{JW1f)yvy@n7#K|rdC5NV-_NC~||C?X&= z6zN@r&|9bpA@cy|{Ljq0X1!l#X3dwwTC8L}A^W-SeeZJZeeH+$&oz`OuP|Hzfk2ch zPZeH(Kx9FuzvLHzE9p&BAAy(4u21znKp^I@)87lR3)@y8&>fJ9!sC~|DQirBE%NlU55wg_l&2RS-MDCb z_CY4iBa+iMH19wRr>{ZWm-zbgQ?r}e*n(*n@IBcrT3YoB6=EFofpFbr{@v}X-#Ihl*vYvS)S zf$f?7uipuN{+0yP>ns|eVTkJZnv_HVUH-GLc))MIZ8e)GiW{n5Jr?7kGH%zu?F*`h z0;(3T+CdY{k0%*o@Tud2WZec?!U$fgzF;E9skV(|0Uf7I{B^q@cvAb~PmMR;N$^d; z;lTynyO%(qS=9AMBwGv%+%7iy3DO;<-m*!YnN}z6&`%ue(b`_7Q@=u`a@IK=CZv97 zo5)Ubbd(mPx=glymzm0|c{N?KGz^car${qI>hh=$il{#!U&i3<9V#@zkv-BHF+1hM zuLfhYc8UXx2KCEM3<96+Z{&m5t#Yo4M`icQ{khE#N3VJwv-sIlPufkY?k$JNRK>a2 zTSB@p*lN#^!CRe2Em9k+zxcbzYIh56Z3Z;hEc|trTgp!DUZ4G-I%{OC7qhe9`48MF zP;|O~@&{+t-k!6^2(pgYblo##`&cYL%cX~nH}wD>ZL)`h{4Jw@^0lh0rPg7j$x!;w z5Xm%g=!AFk2FRcMCWy(phT&&QIat4@QB>ORZoZF3D6(h0A~en`>^Y@jK7MK|3S1>S zq3Ghps@hXj*5EQcfw!G8SC#vQoU>ezKteA{K^+X{{3hZivWiT~;HetEx4YZORWr2B$3@ z!kkxPds-HOP5v~l$_Um?!-hs$^~43Va#pQIKqoHy;e7-0hb|O*Qsn2%LV}-|%FVco z#S&kR9C-aa+aj6>QVXpkR+SzNo%o;b@e*JuRHay9?QzBpiu9TBU+#HB<42F3*K;al z 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 + + + + + + +Using miniCRAN to create a local CRAN repository • miniCRAN + + + + + + +
    +
    + + + +
    +
    + + + + +
    +

    Start by creating the recursive dependency tree for your target packages.

    +

    For example, imagine a scenario where you want to create a repository that consists of the package foreach and its dependencies.

    +

    Start by creating the dependency list:

    +
    library("miniCRAN")
    +
    +# use Revolution Analytics CRAN mirror
    +revolution <- c(CRAN = "http://cran.microsoft.com")
    +
    +# Specify list of packages to download
    +pkgs <- c("foreach")
    +pkgList <- pkgDep(pkgs, repos = revolution, type = "source", suggests = FALSE, 
    +                  availPkgs = cranJuly2014)
    +pkgList
    +
    ## [1] "foreach"   "codetools" "iterators"
    +

    Next, create a repository with the function makeRepo(). In this example, get the required files for source packages as well as windows binaries:

    +
    # Create temporary folder for miniCRAN
    +dir.create(pth <- file.path(tempdir(), "miniCRAN"))
    +
    +# Make repo for source and win.binary
    +makeRepo(pkgList, path=pth, repos=revolution, type=c("source", "win.binary"))
    +

    Investigate the repository file structure:

    +
    # List all files in miniCRAN
    +list.files(pth, recursive = TRUE, full.names = FALSE)
    +

    Use pkgAvail to list available packages in your repository:

    +
    # Check for available packages
    +pkgAvail(repos = pth, type = "win.binary")[, c(1:3, 5)]
    +
    +

    +Install packages from your local repository

    +

    To install packages from a local repository, you need to use the URI convention file:/// to point to your file lcoation.

    +
    install.packages(pkgs, 
    +                 repos = paste0("file:///", pth),
    +                 type = "source")
    +
    +
    +

    +Adding packages to an existing miniCRAN repository

    +
    +

    +Adding new packages from CRAN

    +

    After creating a local miniCRAN repository, additional packages and their dependencies can easily be added. This mechanism can also be used to re-add an existing package to the miniCRAN repo.

    +
    # Add new packages (from CRAN) to the miniCRAN repo
    +addPackage("Matrix", path = pth, repos = revolution, type = c("source", "win.binary"))
    +pkgAvail(repos = pth, type = "win.binary")[, c(1:3, 5)]
    +

    The value that is returned (invisibly) via addPackage is the number of packages written to the index file, i.e., the total number of packages in the repo of that type.

    +
    +
    +

    +Adding an older version of a package from CRAN

    +

    To add a specific version of a package from CRAN (or another CRAN-like repository), we can easily download the source packages from the CRAN archives. Dependencies for old package versions cannot be determined automatically and must be specified by the user.

    +

    Note: in order to to add binaries of older packages, you will need to download the source and build the binaries on the intended platform yourself. You will need the appropriate R development tools installed in order to build package binaries from source.

    +
    # create a data frame with the package and version info
    +oldVers <- data.frame(
    +  package = c("foreach", "codetools", "iterators"),
    +  version = c("1.4.0", "0.2-7", "1.0.5"),
    +  stringsAsFactors = FALSE
    +)
    +
    +# download old source package version and create repo index
    +addOldPackage(pkgList, path = pth, vers = oldVers$version, repos = revolution, type = "source")
    +

    You will get a warning whenever there are multiple versions of a package saved in the repository. Currently, you need to manually remove duplicate versions before rebuilding the repository’s package index.

    +

    Note: This last step is important, otherwise you may end up with a repo in an inconsistent state.

    +
    # List package versions in the miniCRAN repo (produces warning about duplicates)
    +pkgVersionsSrc <- checkVersions(pkgList, path = pth, type = "source")
    +pkgVersionsBin <- checkVersions(pkgList, path = pth, type = "win.binary")
    +
    +# After inspecting package versions, remove old versions
    +basename(pkgVersionsSrc) # duplicate versions
    +basename(pkgVersionsBin)
    +
    +file.remove(pkgVersionsSrc[c(2,4,6)])
    +
    +# rebuild the package index after removing duplicate package versions
    +updateRepoIndex(pth, type = c("source", "win.binary"))
    +

    To see the updated list of packages available in the miniCRAN repo:

    +
    pkgAvail(pth, type = "source")[, c(1:3, 5)] # contains the old versions
    +pkgAvail(pth, type = "win.binary")[, c(1:3, 5)] # contains the current versions
    +
    +
    +

    +Adding packages from other sources

    +

    This feature will be implemented in a future release.

    +
    +
    +
    +

    +Updating the packages in a miniCRAN repository

    +

    Checking for updated versions of the packages currently stored in the miniCRAN repository:

    +
    # Check if updated packages are available
    +oldPackages(path = pth, repos = revolution, type = "source")[, 1:3] # should need update
    +oldPackages(path = pth, repos = revolution, type = "win.binary")[, 1:3] # should be current
    +

    Update the versions of the packages currently stored in the miniCRAN repository. By default, a prompt is given to confirm the update for each package. This prompt can be suppressed using ask = FALSE, which will update all packages. Be careful using this option if you want to keep certain packages at an older version.

    +
    # Update available packages
    +updatePackages(path = pth, repos = revolution, type = "source", ask = FALSE) # should need update
    +updatePackages(path = pth, repos = revolution, type = "win.binary", ask = FALSE) # should be current
    +
    +
    +
    + + + +
    + + +
    + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/articles/miniCRAN-non-CRAN-repos.html b/docs/articles/miniCRAN-non-CRAN-repos.html new file mode 100644 index 0000000..c83e4d3 --- /dev/null +++ b/docs/articles/miniCRAN-non-CRAN-repos.html @@ -0,0 +1,170 @@ + + + + + + + +Using repositories other than CRAN with miniCRAN • miniCRAN + + + + + + +
    +
    + + + +
    +
    + + + + +
    +

    Although the package name miniCRAN seems to indicate you can only use CRAN as a repository, you can in fact use any CRAN-like repository.

    +

    This vignette contains some examples of how to refer to different package repositories, including CRAN, alternative mirrors of CRAN, R-Forge as well as BioConductor.

    +

    To simplify the code to show the salient features, we use a little helper function, index() that is a simple wrapper around available.packages():

    +
    # Wrapper around available.packages ---------------------------------------
    + 
    +index <- function(url, type = "source", filters = NULL, head = 5, cols = c("Package", "Version")){
    +  contribUrl <- contrib.url(url, type = type)
    +  p <- available.packages(contribUrl, type = type, filters = filters)
    +  p[1:head, cols]
    +}
    +
    +

    +Using CRAN

    +

    The URL for the master mirror in Austria:

    +
    CRAN <- "http://cran.r-project.org"
    +index(CRAN)
    +
    +
    +

    +Using a different mirror

    +

    You can also point to any other mirror, for example the stable version hosted by Revolution Analytics:

    +
    revoStable <- "http://packages.revolutionanalytics.com/cran/3.1/stable"
    +index(revoStable)
    + 
    +revoMirror <- "http://cran.revolutionanalytics.com"
    +index(revoMirror)
    +
    +
    +

    +Using R-forge

    +

    R-forge has CRAN-like structure:

    +
    rforge <- "http://r-forge.r-project.org"
    +index(rforge)
    +
    +
    +

    +Using BioConductor

    +

    Although BioConductor has a different preferred install mechanism, the underlying repository structure is also CRAN-like:

    +
    bioc <- local({
    +  env <- new.env()
    +  on.exit(rm(env))
    +  evalq(source("http://bioconductor.org/biocLite.R", local = TRUE), env)
    +  biocinstallRepos()
    +})
    + 
    +bioc
    +bioc[grep("BioC", names(bioc))]
    + 
    + 
    +index(bioc["BioCsoft"])
    +
    +
    +
    + + + +
    + + +
    + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/authors.html b/docs/authors.html new file mode 100644 index 0000000..a503870 --- /dev/null +++ b/docs/authors.html @@ -0,0 +1,139 @@ + + + + + + + + +Authors • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + +
      +
    • +

      Microsoft Corporation. Copyright holder. +

      +
    • +
    • +

      Andrie de + Vries. Author, maintainer. +

      +
    • +
    • +

      Alex Chubaty. Contributor. +

      +
    • +
    + +
    + +
    + + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..3413a19 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,208 @@ + + + + + + + +Create a Mini Version of CRAN Containing Only Selected Packages • miniCRAN + + + + + + +
    +
    + + + +
    +
    +
    + + +

    Create a mini version of CRAN containing only selected packages

    +
    +

    +Introduction

    +

    At the end of 2014, CRAN consisted of more than 6,000 packages. By then end of 2017, the number of packages doubled to more than 12,000. Many organisations need to maintain a private mirror of CRAN, but with only a subset of packages that are relevant to them.

    +

    The miniCRAN package makes it possible to create an internally consistent repository consisting of selected packages from CRAN-like repositories. The user specifies a set of desired packages, and miniCRAN recursively reads the dependency tree for these packages, then downloads only this subset.

    +
    +
    +

    +Important functions:

    + ++++ + + + + + + + + + + + + + + + + + + + + + + +
    FunctionUse it for
    pkgDep()Find package dependencies
    makeRepo()Make repository (with or without downloading packages)
    addPackage()Add additonal packages (and their dependencies) to existing repository
    updatePackages()Update the versions of packages currently in the repository
    +
    +
    +

    +Installation:

    +

    Get the stable version from CRAN:

    +
    install.packages("miniCRAN")
    +library("miniCRAN")
    +
    +

    +Development version

    +

    Get the latest development version from github:

    +
    # Use `devtools` to install directly from github
    +library(devtools)
    +install_github("andrie/miniCRAN")
    +
    +
    +

    +System requirements

    +

    The miniCRAN package itself doesn’t introduce any system dependencies. However, the package imports the curl and XML packages. These have system requirements on libxml2-devel, libcurl-devel and openssl-devel.

    +
      +
    • On systems with the rpm package manager (Red Hat, CentOS) try:
    • +
    +

    sh yum install libcurl-devel libxml2-devel openssl-devel

    +
      +
    • On systems with the aptitude package manager (Debian, Ubuntu) try:
    • +
    +

    sh apt-get install libcurl4-openssl-dev libxml2-devel openssl-devel

    +
    +
    +
    +

    +Example:

    +
    # Determine and download the packages `ggplot2`, `plyr` and `reshape2`, including their dependencies:
    +
    +library("miniCRAN")
    +pkgs <- c("ggplot2", "plyr", "reshape2")
    +makeRepo(pkgDep(pkgs), path = file.path(tempdir(), "miniCRAN"))
    +
    +
    +

    +Supported by Microsoft

    +

    I started this project while employed by Revolution Analytics and Microsoft. Microsoft has kindly agreed that I maintain the project individually, and retains copyright to all work on the project until October 2017.

    +
    +
    +
    + + +
    + + +
    + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/jquery.sticky-kit.min.js b/docs/jquery.sticky-kit.min.js new file mode 100644 index 0000000..e2a3c6d --- /dev/null +++ b/docs/jquery.sticky-kit.min.js @@ -0,0 +1,9 @@ +/* + Sticky-kit v1.1.2 | WTFPL | Leaf Corcoran 2015 | http://leafo.net +*/ +(function(){var b,f;b=this.jQuery||window.jQuery;f=b(window);b.fn.stick_in_parent=function(d){var A,w,J,n,B,K,p,q,k,E,t;null==d&&(d={});t=d.sticky_class;B=d.inner_scrolling;E=d.recalc_every;k=d.parent;q=d.offset_top;p=d.spacer;w=d.bottoming;null==q&&(q=0);null==k&&(k=void 0);null==B&&(B=!0);null==t&&(t="is_stuck");A=b(document);null==w&&(w=!0);J=function(a,d,n,C,F,u,r,G){var v,H,m,D,I,c,g,x,y,z,h,l;if(!a.data("sticky_kit")){a.data("sticky_kit",!0);I=A.height();g=a.parent();null!=k&&(g=g.closest(k)); +if(!g.length)throw"failed to find stick parent";v=m=!1;(h=null!=p?p&&a.closest(p):b("
    "))&&h.css("position",a.css("position"));x=function(){var c,f,e;if(!G&&(I=A.height(),c=parseInt(g.css("border-top-width"),10),f=parseInt(g.css("padding-top"),10),d=parseInt(g.css("padding-bottom"),10),n=g.offset().top+c+f,C=g.height(),m&&(v=m=!1,null==p&&(a.insertAfter(h),h.detach()),a.css({position:"",top:"",width:"",bottom:""}).removeClass(t),e=!0),F=a.offset().top-(parseInt(a.css("margin-top"),10)||0)-q, +u=a.outerHeight(!0),r=a.css("float"),h&&h.css({width:a.outerWidth(!0),height:u,display:a.css("display"),"vertical-align":a.css("vertical-align"),"float":r}),e))return l()};x();if(u!==C)return D=void 0,c=q,z=E,l=function(){var b,l,e,k;if(!G&&(e=!1,null!=z&&(--z,0>=z&&(z=E,x(),e=!0)),e||A.height()===I||x(),e=f.scrollTop(),null!=D&&(l=e-D),D=e,m?(w&&(k=e+u+c>C+n,v&&!k&&(v=!1,a.css({position:"fixed",bottom:"",top:c}).trigger("sticky_kit:unbottom"))),eb&&!v&&(c-=l,c=Math.max(b-u,c),c=Math.min(q,c),m&&a.css({top:c+"px"})))):e>F&&(m=!0,b={position:"fixed",top:c},b.width="border-box"===a.css("box-sizing")?a.outerWidth()+"px":a.width()+"px",a.css(b).addClass(t),null==p&&(a.after(h),"left"!==r&&"right"!==r||h.append(a)),a.trigger("sticky_kit:stick")),m&&w&&(null==k&&(k=e+u+c>C+n),!v&&k)))return v=!0,"static"===g.css("position")&&g.css({position:"relative"}), +a.css({position:"absolute",bottom:d,top:"auto"}).trigger("sticky_kit:bottom")},y=function(){x();return l()},H=function(){G=!0;f.off("touchmove",l);f.off("scroll",l);f.off("resize",y);b(document.body).off("sticky_kit:recalc",y);a.off("sticky_kit:detach",H);a.removeData("sticky_kit");a.css({position:"",bottom:"",top:"",width:""});g.position("position","");if(m)return null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),h.remove()),a.removeClass(t)},f.on("touchmove",l),f.on("scroll",l),f.on("resize", +y),b(document.body).on("sticky_kit:recalc",y),a.on("sticky_kit:detach",H),setTimeout(l,0)}};n=0;for(K=this.length;n + + + + + diff --git a/docs/pkgdown.css b/docs/pkgdown.css new file mode 100644 index 0000000..209ce57 --- /dev/null +++ b/docs/pkgdown.css @@ -0,0 +1,163 @@ +/* Sticker footer */ +body > .container { + display: flex; + padding-top: 60px; + min-height: calc(100vh); + flex-direction: column; +} + +body > .container .row { + flex: 1; +} + +footer { + margin-top: 45px; + padding: 35px 0 36px; + border-top: 1px solid #e5e5e5; + color: #666; + display: flex; +} +footer p { + margin-bottom: 0; +} +footer div { + flex: 1; +} +footer .pkgdown { + text-align: right; +} +footer p { + margin-bottom: 0; +} + +img.icon { + float: right; +} + +img { + max-width: 100%; +} + +/* Section anchors ---------------------------------*/ + +a.anchor { + margin-left: -30px; + display:inline-block; + width: 30px; + height: 30px; + visibility: hidden; + + background-image: url(./link.svg); + background-repeat: no-repeat; + background-size: 20px 20px; + background-position: center center; +} + +.hasAnchor:hover a.anchor { + visibility: visible; +} + +@media (max-width: 767px) { + .hasAnchor:hover a.anchor { + visibility: hidden; + } +} + + +/* Fixes for fixed navbar --------------------------*/ + +.contents h1, .contents h2, .contents h3, .contents h4 { + padding-top: 60px; + margin-top: -60px; +} + +/* Static header placement on mobile devices */ +@media (max-width: 767px) { + .navbar-fixed-top { + position: absolute; + } + .navbar { + padding: 0; + } +} + + +/* Sidebar --------------------------*/ + +#sidebar { + margin-top: 30px; +} +#sidebar h2 { + font-size: 1.5em; + margin-top: 1em; +} + +#sidebar h2:first-child { + margin-top: 0; +} + +#sidebar .list-unstyled li { + margin-bottom: 0.5em; +} + +/* Reference index & topics ----------------------------------------------- */ + +.ref-index th {font-weight: normal;} +.ref-index h2 {font-size: 20px;} + +.ref-index td {vertical-align: top;} +.ref-index .alias {width: 40%;} +.ref-index .title {width: 60%;} + +.ref-index .alias {width: 40%;} +.ref-index .title {width: 60%;} + +.ref-arguments th {text-align: right; padding-right: 10px;} +.ref-arguments th, .ref-arguments td {vertical-align: top;} +.ref-arguments .name {width: 20%;} +.ref-arguments .desc {width: 80%;} + +/* Nice scrolling for wide elements --------------------------------------- */ + +table { + display: block; + overflow: auto; +} + +/* Syntax highlighting ---------------------------------------------------- */ + +pre { + word-wrap: normal; + word-break: normal; + border: 1px solid #eee; +} + +pre, code { + background-color: #f8f8f8; + color: #333; +} + +pre .img { + margin: 5px 0; +} + +pre .img img { + background-color: #fff; + display: block; + height: auto; +} + +code a, pre a { + color: #375f84; +} + +.fl {color: #1514b5;} +.fu {color: #000000;} /* function */ +.ch,.st {color: #036a07;} /* string */ +.kw {color: #264D66;} /* keyword */ +.co {color: #888888;} /* comment */ + +.message { color: black; font-weight: bolder;} +.error { color: orange; font-weight: bolder;} +.warning { color: #6A0366; font-weight: bolder;} + diff --git a/docs/pkgdown.js b/docs/pkgdown.js new file mode 100644 index 0000000..4b81713 --- /dev/null +++ b/docs/pkgdown.js @@ -0,0 +1,45 @@ +$(function() { + $("#sidebar").stick_in_parent({offset_top: 40}); + $('body').scrollspy({ + target: '#sidebar', + offset: 60 + }); + + var cur_path = paths(location.pathname); + $("#navbar ul li a").each(function(index, value) { + if (value.text == "Home") + return; + if (value.getAttribute("href") === "#") + return; + + var path = paths(value.pathname); + if (is_prefix(cur_path, path)) { + // Add class to parent
  • , and enclosing
  • if in dropdown + var menu_anchor = $(value); + menu_anchor.parent().addClass("active"); + menu_anchor.closest("li.dropdown").addClass("active"); + } + }); +}); + +function paths(pathname) { + var pieces = pathname.split("/"); + pieces.shift(); // always starts with / + + var end = pieces[pieces.length - 1]; + if (end === "index.html" || end === "") + pieces.pop(); + return(pieces); +} + +function is_prefix(needle, haystack) { + if (needle.length > haystack.lengh) + return(false); + + for (var i = 0; i < haystack.length; i++) { + if (needle[i] != haystack[i]) + return(false); + } + + return(true); +} diff --git a/docs/reference/addLocalPackage.html b/docs/reference/addLocalPackage.html new file mode 100644 index 0000000..a4fb5cb --- /dev/null +++ b/docs/reference/addLocalPackage.html @@ -0,0 +1,211 @@ + + + + + + + + +Add local packages to a miniCRAN repository. — addLocalPackage • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Examine the contents of a directory specified by pkgPath for pre-built packages matching the names specified by pkgs, and add these to the miniCRAN repository.

    + + +
    addLocalPackage(pkgs = NULL, pkgPath = NULL, path = NULL,
    +  type = "source", Rversion = R.version, writePACKAGES = TRUE,
    +  deps = FALSE, quiet = FALSE, build = FALSE)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    pkgs

    Character vector of packages to download

    pkgPath

    Character vector of directory location containing packages to be added. Note that pkgPath should be the parent directory of the package (i.e., the package directory path is constructed from file.path(pkgPath, pkgs)).

    path

    Destination download path. This path is the root folder of your new repository.

    type

    Possible values are (currently) "source", "mac.binary" and "win.binary": the binary types can be listed and downloaded but not installed on other platforms. Passed to download.packages().

    Rversion

    Version of R. Can be specified as a character string with the two digit R version, e.g. "3.1". Defaults to R.version

    writePACKAGES

    If TRUE, calls write_PACKAGES() to update the repository PACKAGES file.

    deps

    logical indicating whether the package dependencies should be added (default TRUE).

    quiet

    If TRUE, suppress status messages (if any), and the progress bar during download.

    build

    Logical indicating whether packages should be build prior to adding.

    + +

    Value

    + +

    Installs the packages and returns the new package index.

    + +

    Details

    + +

    To build a package from source and then add it, use build = TRUE. Note that package development libraries and the devtools package must be installed on your system in order to build packages.

    + +

    Note

    + +

    Currently, adding local packages does not check nor download their dependencies.

    + + +

    Examples

    +
    # NOT RUN {
    + addLocalPackage("myPackage", "path/to/my/prebuilt/package",
    +                 "path/to/my/miniCRAN/repo")
    +
    + addLocalPackage("myPackage", "path/to/my/package/sourcecode",
    +                 "path/to/my/miniCRAN/repo", build = TRUE)
    +# }
    +
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/addOldPackage.html b/docs/reference/addOldPackage.html new file mode 100644 index 0000000..af2cfff --- /dev/null +++ b/docs/reference/addOldPackage.html @@ -0,0 +1,248 @@ + + + + + + + + +Add old package versions to a miniCRAN repository. — addOldPackage • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Will download and add older source package versions. Older binary versions are not normally available on CRAN and should be build from source on the platform for which they are required. As such, specifying type!="source" will likely fail as the download will not be successful.

    + + +
    addOldPackage(pkgs = NULL, path = NULL, vers = NULL,
    +  repos = getOption("repos"), type = "source", Rversion = R.version,
    +  writePACKAGES = TRUE, deps = FALSE, quiet = TRUE)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    pkgs

    Character vector of packages to download

    path

    Destination download path. This path is the root folder of your new repository.

    vers

    The package version to install.

    repos

    URL(s) of the 'contrib' sections of the repositories, e.g. "http://cran.us.r-project.org". Passed to available.packages()

    type

    Possible values are (currently) "source", "mac.binary" and "win.binary": the binary types can be listed and downloaded but not installed on other platforms. Passed to download.packages().

    Rversion

    Version of R. Can be specified as a character string with the two digit R version, e.g. "3.1". Defaults to R.version

    writePACKAGES

    If TRUE, calls write_PACKAGES() to update the repository PACKAGES file.

    deps

    logical indicating whether the package dependencies should be added (default TRUE).

    quiet

    If TRUE, suppress status messages (if any), and the progress bar during download.

    + +

    Value

    + +

    Adds the packages, rebuilds the package index, and invisibly returns the number of packages written to the index files.

    + +

    Note

    + +

    Dependencies for old package versions cannot be determined automatically and must be specified by the user in pkgs and vers. Thus, deps=FALSE is the default for this function.

    + +

    See also

    + +

    Other update repo functions: addPackage, + checkVersions, makeRepo, + updatePackages

    + + +

    Examples

    +
    ### `checkVersions` and `add.packages.miniCRAN` require an existing miniCRAN repo + +# Specify list of packages to download +revolution <- c(CRAN = getOption("miniCRAN.mran")) +pkgs <- c("foreach") +pkgTypes <- c("source", "win.binary") + +pdb <- cranJuly2014
    # NOT RUN { + pdb <- pkgAvail(repos = revolution, type = "source") +# }
    +pkgList <- pkgDep(pkgs, availPkgs = pdb, repos = revolution, type = "source", suggests = FALSE) +pkgList
    #> [1] "foreach" "codetools" "iterators"
    +
    # NOT RUN { + # Create temporary folder for miniCRAN + dir.create(pth <- file.path(tempdir(), "miniCRAN")) + + # Make repo for source and win.binary + makeRepo(pkgList, path = pth, repos = revolution, type = pkgTypes) + + # Add other versions of a package (and assume these were added previously) + oldVers <- data.frame(package = c("foreach", "codetools", "iterators"), + version = c("1.4.0", "0.2-7", "1.0.5"), + stringsAsFactors = FALSE) + pkgs <- oldVers$package + addOldPackage(pkgs, path = pth, vers = oldVers$version, repos = revolution, type = "source") + # NOTE: older binary versions would need to be build from source + + # List package versions in the miniCRAN repo (produces warning about duplicates) + pkgVersionsSrc <- checkVersions(pkgs, path = pth, type = "source") + pkgVersionsBin <- checkVersions(pkgs, path = pth, type = "win.binary") + + # After inspecting package versions, remove old versions + basename(pkgVersionsSrc) # "foreach_1.4.0.tar.gz" "foreach_1.4.2.tar.gz" + basename(pkgVersionsBin) # "foreach_1.4.0.zip" "foreach_1.4.2.zip" + file.remove(c(pkgVersionsSrc[1], pkgVersionsBin[1])) + + # Rebuild package index after adding/removing files + updateRepoIndex(pth, type = pkgTypes, Rversion = R.version) + + pkgAvail(pth, type = "source") + + # Add new packages (from CRAN) to the miniCRAN repo + addPackage("Matrix", path = pth, repos = revolution, type = pkgTypes) + + # Delete temporary folder + unlink(pth, recursive = TRUE) +# }
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/addPackage.html b/docs/reference/addPackage.html new file mode 100644 index 0000000..14f6b71 --- /dev/null +++ b/docs/reference/addPackage.html @@ -0,0 +1,238 @@ + + + + + + + + +Add packages to a miniCRAN repository. — addPackage • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Add packages to a miniCRAN repository.

    + + +
    addPackage(pkgs = NULL, path = NULL, repos = getOption("repos"),
    +  type = "source", Rversion = R.version, writePACKAGES = TRUE,
    +  deps = TRUE, quiet = FALSE)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    pkgs

    Character vector of packages to download

    path

    Destination download path. This path is the root folder of your new repository.

    repos

    URL(s) of the 'contrib' sections of the repositories, e.g. "http://cran.us.r-project.org". Passed to available.packages()

    type

    Possible values are (currently) "source", "mac.binary" and "win.binary": the binary types can be listed and downloaded but not installed on other platforms. Passed to download.packages().

    Rversion

    Version of R. Can be specified as a character string with the two digit R version, e.g. "3.1". Defaults to R.version

    writePACKAGES

    If TRUE, calls write_PACKAGES() to update the repository PACKAGES file.

    deps

    logical indicating whether the package dependencies should be added (default TRUE).

    quiet

    If TRUE, suppress status messages (if any), and the progress bar during download.

    + +

    Value

    + +

    Installs the packages, rebuilds the package index, and invisibly returns the number of packages written to the index files.

    + +

    See also

    + +

    Other update repo functions: addOldPackage, + checkVersions, makeRepo, + updatePackages

    + + +

    Examples

    +
    ### `checkVersions` and `add.packages.miniCRAN` require an existing miniCRAN repo + +# Specify list of packages to download +revolution <- c(CRAN = getOption("miniCRAN.mran")) +pkgs <- c("foreach") +pkgTypes <- c("source", "win.binary") + +pdb <- cranJuly2014
    # NOT RUN { + pdb <- pkgAvail(repos = revolution, type = "source") +# }
    +pkgList <- pkgDep(pkgs, availPkgs = pdb, repos = revolution, type = "source", suggests = FALSE) +pkgList
    #> [1] "foreach" "codetools" "iterators"
    +
    # NOT RUN { + # Create temporary folder for miniCRAN + dir.create(pth <- file.path(tempdir(), "miniCRAN")) + + # Make repo for source and win.binary + makeRepo(pkgList, path = pth, repos = revolution, type = pkgTypes) + + # Add other versions of a package (and assume these were added previously) + oldVers <- data.frame(package = c("foreach", "codetools", "iterators"), + version = c("1.4.0", "0.2-7", "1.0.5"), + stringsAsFactors = FALSE) + pkgs <- oldVers$package + addOldPackage(pkgs, path = pth, vers = oldVers$version, repos = revolution, type = "source") + # NOTE: older binary versions would need to be build from source + + # List package versions in the miniCRAN repo (produces warning about duplicates) + pkgVersionsSrc <- checkVersions(pkgs, path = pth, type = "source") + pkgVersionsBin <- checkVersions(pkgs, path = pth, type = "win.binary") + + # After inspecting package versions, remove old versions + basename(pkgVersionsSrc) # "foreach_1.4.0.tar.gz" "foreach_1.4.2.tar.gz" + basename(pkgVersionsBin) # "foreach_1.4.0.zip" "foreach_1.4.2.zip" + file.remove(c(pkgVersionsSrc[1], pkgVersionsBin[1])) + + # Rebuild package index after adding/removing files + updateRepoIndex(pth, type = pkgTypes, Rversion = R.version) + + pkgAvail(pth, type = "source") + + # Add new packages (from CRAN) to the miniCRAN repo + addPackage("Matrix", path = pth, repos = revolution, type = pkgTypes) + + # Delete temporary folder + unlink(pth, recursive = TRUE) +# }
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/addPackageListingGithub.html b/docs/reference/addPackageListingGithub.html new file mode 100644 index 0000000..46e7f4d --- /dev/null +++ b/docs/reference/addPackageListingGithub.html @@ -0,0 +1,175 @@ + + + + + + + + +Add DESCRIPTION information from package on github. — addPackageListingGithub • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Downloads the DESCRIPTION file from a package on github, parses the fields and adds (or replaces) a row in the available package database.

    + + +
    addPackageListingGithub(pdb = pkgAvail(), repo, username = NULL,
    +  branch = "master")
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + +
    pdb

    Package database, usually the result of pkgAvail() or available.packages()

    repo

    Character vector. Name of repository on github, e.g. "RevolutionAnalytics/checkpoint"

    username

    Optional character vector. Name of repository on github, e.g. `"RevolutionAnalytics/checkpoint"``

    branch

    name of branch, defaults to "master"

    + + +

    Examples

    +
    # Create package database +pdb <- cranJuly2014
    # NOT RUN { + pdb <- pkgAvail(repos = c(CRAN = getOption("minicran.mran"))) + + # Overwrite pdb with development version of miniCRAN at github + newpdb <- addPackageListingGithub(pdb = pdb, "andrie/miniCRAN") + newpdb["miniCRAN", ] + + # Add package from github that's not currently on CRAN + newpdb <- addPackageListingGithub(pdb = pdb, repo = "RevolutionAnalytics/checkpoint") + newpdb["checkpoint", ] + + set.seed(1) + plot(makeDepGraph("checkpoint", availPkgs = newpdb, suggests = TRUE)) +# }
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/basePkgs.html b/docs/reference/basePkgs.html new file mode 100644 index 0000000..5cb0d0d --- /dev/null +++ b/docs/reference/basePkgs.html @@ -0,0 +1,142 @@ + + + + + + + + +Returns names of base packages. — basePkgs • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Retrieves names of installed packages by calling utils::installed.packages() and returning only those packages where Priority == "base".

    + + +
    basePkgs()
    + +

    See also

    + +

    pkgDep()

    +

    Other dependency functions: makeDepGraph, + pkgDep, plot.pkgDepGraph

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/checkVersions.html b/docs/reference/checkVersions.html new file mode 100644 index 0000000..e56810c --- /dev/null +++ b/docs/reference/checkVersions.html @@ -0,0 +1,221 @@ + + + + + + + + +Check for previous versions of packages in a miniCRAN repository. — checkVersions • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Checks for previous versions, and returns the file paths for packages with multiple versions. You can subsequently decide which version to keep.

    + + +
    checkVersions(pkgs = NULL, path = NULL, type = "source",
    +  Rversion = R.version)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + +
    pkgs

    Character vector of packages to be installed. If not provided, checks all files for multiple package versions.

    path

    The local path to the directory where the miniCRAN repo resides.

    type

    character, indicating the type of package to download and install. See install.packages().

    Rversion

    Version of R. Can be specified as a character string with the two digit R version, e.g. "3.1". Defaults to R.version

    + +

    Value

    + +

    Returns invisibly the filepaths to packages with multiple versions for removal.

    + +

    See also

    + +

    Other update repo functions: addOldPackage, + addPackage, makeRepo, + updatePackages

    + + +

    Examples

    +
    ### `checkVersions` and `add.packages.miniCRAN` require an existing miniCRAN repo + +# Specify list of packages to download +revolution <- c(CRAN = getOption("miniCRAN.mran")) +pkgs <- c("foreach") +pkgTypes <- c("source", "win.binary") + +pdb <- cranJuly2014
    # NOT RUN { + pdb <- pkgAvail(repos = revolution, type = "source") +# }
    +pkgList <- pkgDep(pkgs, availPkgs = pdb, repos = revolution, type = "source", suggests = FALSE) +pkgList
    #> [1] "foreach" "codetools" "iterators"
    +
    # NOT RUN { + # Create temporary folder for miniCRAN + dir.create(pth <- file.path(tempdir(), "miniCRAN")) + + # Make repo for source and win.binary + makeRepo(pkgList, path = pth, repos = revolution, type = pkgTypes) + + # Add other versions of a package (and assume these were added previously) + oldVers <- data.frame(package = c("foreach", "codetools", "iterators"), + version = c("1.4.0", "0.2-7", "1.0.5"), + stringsAsFactors = FALSE) + pkgs <- oldVers$package + addOldPackage(pkgs, path = pth, vers = oldVers$version, repos = revolution, type = "source") + # NOTE: older binary versions would need to be build from source + + # List package versions in the miniCRAN repo (produces warning about duplicates) + pkgVersionsSrc <- checkVersions(pkgs, path = pth, type = "source") + pkgVersionsBin <- checkVersions(pkgs, path = pth, type = "win.binary") + + # After inspecting package versions, remove old versions + basename(pkgVersionsSrc) # "foreach_1.4.0.tar.gz" "foreach_1.4.2.tar.gz" + basename(pkgVersionsBin) # "foreach_1.4.0.zip" "foreach_1.4.2.zip" + file.remove(c(pkgVersionsSrc[1], pkgVersionsBin[1])) + + # Rebuild package index after adding/removing files + updateRepoIndex(pth, type = pkgTypes, Rversion = R.version) + + pkgAvail(pth, type = "source") + + # Add new packages (from CRAN) to the miniCRAN repo + addPackage("Matrix", path = pth, repos = revolution, type = pkgTypes) + + # Delete temporary folder + unlink(pth, recursive = TRUE) +# }
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/cranJuly2014.html b/docs/reference/cranJuly2014.html new file mode 100644 index 0000000..f444394 --- /dev/null +++ b/docs/reference/cranJuly2014.html @@ -0,0 +1,140 @@ + + + + + + + + +Stored version of available.packages() — cranJuly2014 • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Copy of the result of utils::available.packages() on July 1, 2014.

    + + +
    cranJuly2014
    + +

    Format

    + +

    matrix

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/getCranDescription.html b/docs/reference/getCranDescription.html new file mode 100644 index 0000000..6fe27a7 --- /dev/null +++ b/docs/reference/getCranDescription.html @@ -0,0 +1,165 @@ + + + + + + + + +Scrape DESCRIPTION from CRAN for each pkg. — getCranDescription • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Scrape DESCRIPTION from CRAN for each pkg.

    + + +
    getCranDescription(pkg, repos = getOption("repos"), type = "source",
    +  pkgs = pkgDep(pkg, repos = repos, type = type))
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + +
    pkg

    Character vector of packages.

    repos

    URL(s) of the 'contrib' sections of the repositories, e.g. "http://cran.us.r-project.org". Passed to available.packages()

    type

    Possible values are (currently) "source", "mac.binary" and "win.binary": the binary types can be listed and downloaded but not installed on other platforms. Passed to download.packages().

    pkgs

    Character vector of packages to download

    + + +

    Examples

    +
    # NOT RUN {
    +getCranDescription(c("igraph", "ggplot2", "XML"),
    +  repos = c(CRAN = getOption("minicran.mran"))
    +)
    +# }
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/index.html b/docs/reference/index.html new file mode 100644 index 0000000..d69adb0 --- /dev/null +++ b/docs/reference/index.html @@ -0,0 +1,297 @@ + + + + + + + + +Function reference • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    Create

    +

    Creating a miniCRAN

    +
    +

    makeRepo updateRepoIndex

    +

    Downloads packages from CRAN to specified path and creates a local repository.

    +

    Dependencies

    +

    Identify and plot dependency tree

    +
    +

    pkgDep

    +

    Retrieves package dependencies.

    +

    plot

    +

    Plots a package dependency graph.

    +

    makeDepGraph

    +

    Create dependency graph from available packages.

    +

    Extend

    +

    Add additional packages

    +
    +

    addLocalPackage

    +

    Add local packages to a miniCRAN repository.

    +

    addOldPackage

    +

    Add old package versions to a miniCRAN repository.

    +

    addPackage

    +

    Add packages to a miniCRAN repository.

    +

    oldPackages updatePackages

    +

    Check for available package updates in a miniCRAN repo.

    +

    Internal functions

    +

    +
    +

    addPackageListingGithub

    +

    Add DESCRIPTION information from package on github.

    +

    basePkgs

    +

    Returns names of base packages.

    +

    checkVersions

    +

    Check for previous versions of packages in a miniCRAN repository.

    +

    cranJuly2014

    +

    Stored version of available.packages()

    +

    getCranDescription

    +

    Scrape DESCRIPTION from CRAN for each pkg.

    +

    .listFiles

    +

    List pre-built packages in a directory based on file extension

    +

    makeLibrary

    +

    Deprecated function to download packages to local folder.

    +

    miniCRAN-package

    +

    Create a Private Version of CRAN Containing Only Selected Packages

    +

    pkgAvail

    +

    Reads available packages from CRAN repository.

    +

    repoBinPath

    +

    Construct path to full binary location

    +

    repoPrefix

    +

    Get the path to the repo directory containing the package files.

    +

    twodigitRversion

    +

    Get a two-digit version of the R version

    +
    +
    + + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/listFiles.html b/docs/reference/listFiles.html new file mode 100644 index 0000000..75e127e --- /dev/null +++ b/docs/reference/listFiles.html @@ -0,0 +1,165 @@ + + + + + + + + +List pre-built packages in a directory based on file extension — .listFiles • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    List pre-built packages in a directory based on file extension

    + + +
    .listFiles(pkgs, path, type)
    + +

    Arguments

    + + + + + + + + + + + + + + +
    pkgs

    Character vector of package names

    path

    Character string specifying the directory containing packages to be added.

    type

    Character indicating the package type (e.g., "source", "win.binary", etc.).

    + +

    Value

    + +

    Installs the packages and returns the new package index.

    + + +

    Examples

    +
    # NOT RUN {
    + .listFiles('path/to/my/packages', type = "source")
    +# }
    +
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/makeDepGraph-1.png b/docs/reference/makeDepGraph-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f348ca599c2550e1a181b03e208d10540ebcf2fe GIT binary patch literal 80639 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

    Km`&=SMGJKk(Z7LeYe5aU+PC^UY=d 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 literal 0 HcmV?d00001 diff --git a/docs/reference/makeDepGraph.html b/docs/reference/makeDepGraph.html new file mode 100644 index 0000000..016210f --- /dev/null +++ b/docs/reference/makeDepGraph.html @@ -0,0 +1,220 @@ + + + + + + + + +Create dependency graph from available packages. — makeDepGraph • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Each package is a node, and a dependency is an edge

    + + +
    makeDepGraph(pkg, availPkgs, repos = getOption("repos"), type = "source",
    +  suggests = TRUE, enhances = FALSE, includeBasePkgs = FALSE, ...)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    pkg

    Character vector of packages.

    availPkgs

    Vector of available packages. Defaults to reading this list from CRAN, using available.packages()

    repos

    URL(s) of the 'contrib' sections of the repositories, e.g. "http://cran.us.r-project.org". Passed to available.packages()

    type

    Possible values are (currently) "source", "mac.binary" and "win.binary": the binary types can be listed and downloaded but not installed on other platforms. Passed to download.packages().

    suggests

    If TRUE, retrieves Suggests dependencies (non-recursively)

    enhances

    If TRUE, retrieves Enhances dependencies (non-recursively)

    includeBasePkgs

    If TRUE, include base R packages in results

    ...

    Other arguments passed to available.packages()

    + +

    See also

    + +

    pkgDep() to extract package dependencies

    +

    Other dependency functions: basePkgs, + pkgDep, plot.pkgDepGraph

    + + +

    Examples

    +
    + + +availPkgs <- cranJuly2014
    # NOT RUN { +availPkgs <- pkgAvail( + repos = c(CRAN = getOption("minicran.mran")), + type = "source" + ) +# }
    + +# Create dependency graph using stored database of available packages +p <- makeDepGraph( + c("ggplot2", "forecast"), + availPkgs = availPkgs +) + +if(require(igraph)) plot(p)
    #> Loading required package: igraph
    #> +#> Attaching package: 'igraph'
    #> The following object is masked from 'package:testthat': +#> +#> compare
    #> The following objects are masked from 'package:stats': +#> +#> decompose, spectrum
    #> The following object is masked from 'package:base': +#> +#> union
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    + + +
    # NOT RUN { + # Create dependency graph using newly retrieved database from CRAN + + p <- makeDepGraph( + c("ggplot2", "forecast"), + repos = c(CRAN = getOption("minicran.mran")), + type = "source" +) +if(require(igraph)) plot(p) +# }
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/makeLibrary.html b/docs/reference/makeLibrary.html new file mode 100644 index 0000000..ab8b0ae --- /dev/null +++ b/docs/reference/makeLibrary.html @@ -0,0 +1,152 @@ + + + + + + + + +Deprecated function to download packages to local folder. — makeLibrary • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Deprecated function to download packages to local folder.

    + + +
    makeLibrary(pkgs, path, type = "source")
    + +

    Arguments

    + + + + + + + + + + + + + + +
    pkgs

    Character vector of packages to download

    path

    Destination download path. This path is the root folder of your new repository.

    type

    Possible values are (currently) "source", "mac.binary" and "win.binary": the binary types can be listed and downloaded but not installed on other platforms. Passed to download.packages().

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/makeRepo.html b/docs/reference/makeRepo.html new file mode 100644 index 0000000..1ee82ce --- /dev/null +++ b/docs/reference/makeRepo.html @@ -0,0 +1,254 @@ + + + + + + + + +Downloads packages from CRAN to specified path and creates a local repository. — makeRepo • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Given a list of packages, downloads these packages to a specified destination folder using the required CRAN folder structure, and finally creates the PACKAGES index file. Since the folder structure mimics the required structure and files of a CRAN repository, it supports functions like utils::install.packages().

    + + +
    makeRepo(pkgs, path, repos = getOption("repos"), type = "source",
    +  Rversion = R.version, download = TRUE, writePACKAGES = TRUE,
    +  quiet = FALSE)
    +
    +updateRepoIndex(path, type = "source", Rversion = R.version)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    pkgs

    Character vector of packages to download

    path

    Destination download path. This path is the root folder of your new repository.

    repos

    URL(s) of the 'contrib' sections of the repositories, e.g. "http://cran.us.r-project.org". Passed to available.packages()

    type

    Possible values are (currently) "source", "mac.binary" and "win.binary": the binary types can be listed and downloaded but not installed on other platforms. Passed to download.packages().

    Rversion

    List with two named elements: major and minor. If not supplied, defaults to system version of R, using R.version. Only used if type is not "source"

    download

    If TRUE downloads packages.

    writePACKAGES

    If TRUE, calls write_PACKAGES() to update the repository PACKAGES file.

    quiet

    If TRUE, suppress status messages (if any), and the progress bar during download.

    + +

    Note

    + +

    Internally makes use of utils::download.packages() and write_PACKAGES()

    + +

    Repo folder structure

    + + +

    The folder structure of a repository

      +
    • Root

        +
      • src/contrib

          +
        • PACKAGES

        • +
      • +
      • bin

          +
        • windows/contrib/version

            +
          • PACKAGES

          • +
        • +
        • macosx/contrib/version

            +
          • PACKAGES

          • +
        • +
        • macosx/mavericks/contrib/version

            +
          • PACKAGES

          • +
        • +
        • macosx/leopard/contrib/version

            +
          • PACKAGES

          • +
        • +
      • +
    • +
    + +

    See also

    + +

    Other update repo functions: addOldPackage, + addPackage, checkVersions, + updatePackages

    + + +

    Examples

    +
    +# Specify list of packages to download +revolution <- c(CRAN = getOption("minicran.mran")) +pkgs <- c("foreach") + +pdb <- cranJuly2014
    # NOT RUN { + pdb <- pkgAvail( + repos = c(CRAN = getOption("minicran.mran")), + type = "source" + ) +# }
    +pkgList <- pkgDep(pkgs, availPkgs = pdb, repos = revolution, type = "source", suggests = FALSE) +pkgList
    #> [1] "foreach" "codetools" "iterators"
    + +
    # NOT RUN { +# Create temporary folder for miniCRAN +dir.create(pth <- file.path(tempdir(), "miniCRAN")) + +# Make repo for source and win.binary +makeRepo(pkgList, path = pth, repos = revolution, type = "source") + +# List all files in miniCRAN +list.files(pth, recursive = TRUE) + +# Check for available packages +pkgAvail(repos = pth, type = "source") + +# Repeat process for windows binaries +makeRepo(pkgList, path = pth, repos = revolution, type = "win.binary") +pkgAvail(repos = pth, type = "win.binary") + +# Delete temporary folder +unlink(pth, recursive = TRUE) +# }
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/miniCRAN-package.html b/docs/reference/miniCRAN-package.html new file mode 100644 index 0000000..20bf44d --- /dev/null +++ b/docs/reference/miniCRAN-package.html @@ -0,0 +1,194 @@ + + + + + + + + +Create a Private Version of CRAN Containing Only Selected Packages — miniCRAN-package • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    At the end of 2014, CRAN consisted of more than 6,000 packages. Many organisations need to maintain a private mirror of CRAN, but with only a subset of packages that are relevant to them. + + miniCRAN makes it possible to create an internally consistent repository consisting of selected packages from CRAN-like repositories. The user specifies a set of desired packages, and miniCRAN recursively reads the dependency tree for these packages, then downloads only this subset.

    +

    There are many reasons for not creating a complete mirror CRAN using rsync:

      +
    • You may wish to mirror only a subset of CRAN, for security, legal compliance or any other in-house reason

    • +
    • You may wish to restrict internal package use to a subset of public packages, to minimize package duplication, or other reasons of coding standards

    • +
    • You may wish to make packages available from public repositories other than CRAN, e.g. BioConductor, r-forge, OmegaHat, etc.

    • +
    • You may wish to add custom in-house packages to your repository

    • +
    + +

    The ambition of miniCRAN is to eventually satisfy all of these considerations.

    + + + +

    Making a private repo

    + + +
      +
    • pkgAvail(): Read from a local (or remote) CRAN-like repository and determine available packages.

    • +
    • pkgDep(): Find (recursive) package dependencies.

    • +
    • makeRepo() : Make a mini CRAN repository, by downloading packages (and their dependencies) and creating the appropriate file structure for a repository. This allows you to use functions like utils::available.packages() and utils::install.packages() on your local repository.

    • +
    +

    This subset will be internally consistent, i.e. the following functions will work as expected:

    +

    The main function is makeRepo() - this will download all the required packages, with their dependencies, into the appropriate repository file structure, and then create the repository index (PACKAGES) file.

    + +

    Updating packages in a repo

    + + +
      +
    • oldPackages(): Indicates packages which have a (suitable) later version on the repositories

    • +
    • updatePackages(): Offers to download and install such packages

    • +
    + +

    Creating dependencies

    + + +

    To get a recursive list of dependencies as well as a plot, use pkgDep() followed by makeDepGraph().

    + +

    Package options

    + + +
    +
    minicran.mran

    preferred MRAN URL. Defaults to https://mran.microsoft.com +for R versions 3.2.2 and greater. Versions earlier than 3.2.2 use HTTP instead of HTTPS.

    +
    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/pkgAvail.html b/docs/reference/pkgAvail.html new file mode 100644 index 0000000..bd92441 --- /dev/null +++ b/docs/reference/pkgAvail.html @@ -0,0 +1,163 @@ + + + + + + + + +Reads available packages from CRAN repository. — pkgAvail • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    This is a thin wrapper around utils::available.packages(). If the argument path is supplied, then the function attempts to read from a local repository, otherwise attempts to read from a CRAN mirror at the repos url.

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

    Arguments

    + + + + + + + + + + + + + + + + + + +
    repos

    URL(s) of the 'contrib' sections of the repositories, e.g. "http://cran.us.r-project.org". Passed to available.packages()

    type

    Possible values are (currently) "source", "mac.binary" and "win.binary": the binary types can be listed and downloaded but not installed on other platforms. Passed to download.packages().

    Rversion

    Version of R. Can be specified as a character string with the two digit R version, e.g. "3.1". Defaults to R.version

    quiet

    If TRUE, suppresses warnings

    + +

    See also

    + +

    pkgDep()

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/pkgDep.html b/docs/reference/pkgDep.html new file mode 100644 index 0000000..b1038a2 --- /dev/null +++ b/docs/reference/pkgDep.html @@ -0,0 +1,217 @@ + + + + + + + + +Retrieves package dependencies. — pkgDep • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Performs recursive retrieve for Depends, Imports and LinkLibrary. Performs non-recursive retrieve for Suggests.

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

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    pkg

    Character vector of packages.

    availPkgs

    Vector of available packages. Defaults to reading this list from CRAN, using available.packages()

    repos

    URL(s) of the 'contrib' sections of the repositories, e.g. "http://cran.us.r-project.org". Passed to available.packages()

    type

    Possible values are (currently) "source", "mac.binary" and "win.binary": the binary types can be listed and downloaded but not installed on other platforms. Passed to download.packages().

    depends

    If TRUE, retrieves Depends, Imports and LinkingTo dependencies (non-recursively)

    suggests

    If TRUE, retrieves Suggests dependencies (non-recursively)

    enhances

    If TRUE, retrieves Enhances dependencies (non-recursively)

    includeBasePkgs

    If TRUE, include base R packages in results

    Rversion

    Version of R. Can be specified as a character string with the two digit R version, e.g. "3.1". Defaults to R.version

    quiet

    If TRUE, suppresses warnings

    ...

    Other arguments passed to available.packages()

    + +

    See also

    + +

    Other dependency functions: basePkgs, + makeDepGraph, + plot.pkgDepGraph

    + + +

    Examples

    +
    +
    # NOT RUN { +pkgDep(pkg = c("ggplot2", "plyr", "reshape2"), + repos = c(CRAN = getOption("minicran.mran")) +) +# }
    +pdb <- cranJuly2014
    # NOT RUN { +pdb <- pkgAvail(repos = c(CRAN = getOption("minicran.mran"))) +# }
    +pkgDep(pkg = c("ggplot2", "plyr", "reshape2"), pdb)
    #> [1] "ggplot2" "plyr" "reshape2" "digest" "gtable" +#> [6] "scales" "proto" "MASS" "Rcpp" "stringr" +#> [11] "RColorBrewer" "dichromat" "munsell" "labeling" "colorspace" +#> [16] "SparseM" "lattice" "survival" "Formula" "latticeExtra" +#> [21] "cluster" "maps" "sp" "foreign" "mvtnorm" +#> [26] "TH.data" "sandwich" "zoo" "evaluate" "formatR" +#> [31] "highr" "markdown" "mime" "nlme" "Matrix" +#> [36] "codetools" "iterators" "quantreg" "Hmisc" "mapproj" +#> [41] "hexbin" "maptools" "multcomp" "testthat" "knitr" +#> [46] "mgcv" "abind" "foreach" "doMC" "itertools"
    +
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/plot.pkgDepGraph-1.png b/docs/reference/plot.pkgDepGraph-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0a821c8d796996df2d700b73185cf75a9ac1cf43 GIT binary patch literal 20252 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 Q3Wd@?XM8sA^p)TK7aRv%1poj5 literal 0 HcmV?d00001 diff --git a/docs/reference/plot.pkgDepGraph-4.png b/docs/reference/plot.pkgDepGraph-4.png new file mode 100644 index 0000000000000000000000000000000000000000..77f949b163c142ea0095398c188747cc25ee1b96 GIT binary patch literal 13597 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 + + + + + + + +Plots a package dependency graph. — plot.pkgDepGraph • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Plots a package dependency graph.

    + + +
    # S3 method for pkgDepGraph
    +plot(x, pkgsToHighlight, main = paste(attr(x, "pkgs"),
    +  collapse = ", "), legendPosition = c(-1.2, -1), shape = "circle",
    +  vertex.size = 8, cex = 1, ...)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    x

    pkgDepGraph object

    pkgsToHighlight

    Optional character vector with names of package to hightlight. If missing, defaults to packages used in original call to makeDepGraph()

    main

    Title of plot

    legendPosition

    Numeric vector of length 2, indicating (x, y) position of edge legend. Both values should be in the range [-1; 1]. If NULL, the edge legend is not displayed.

    shape

    Shape of edge. See igraph::igraph.plotting(). Could be "none", "circle", "square", ...

    vertex.size

    Size of vertex shape. igraph::igraph.plotting()

    cex

    Vertex label size.

    ...

    Ignored

    + +

    See also

    + +

    Other dependency functions: basePkgs, + makeDepGraph, pkgDep

    + + +

    Examples

    +
    tags <- "chron" + +# Plot using defaults +pdb <- cranJuly2014
    # NOT RUN { + pdb <- pkgAvail( + repos = c(CRAN = getOption("minicran.mran")), + type = "source" + ) +# }
    +dg <- makeDepGraph(tags, availPkgs = pdb , includeBasePkgs = FALSE, + suggests = TRUE, enhances = TRUE) + +set.seed(42); +plot(dg)
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    +# Move edge legend to top left +set.seed(42); +plot(dg, legendPosition = c(-1, 1))
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    +# Change font size and shape size +set.seed(42); +plot(dg, legendPosition = c(-1, 1), vertex.size = 20, cex = 0.5)
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    + +# Move vertex legend to top right +set.seed(42); +plot(dg, legendPosition = c(1, 1), vertex.size = 20, cex = 0.5)
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <e2>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <86>
    #> Warning: conversion failure on '→' in 'mbcsToSbcs': dot substituted for <92>
    #> Warning: font metrics unknown for Unicode character U+2192
    +
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/repoBinPath.html b/docs/reference/repoBinPath.html new file mode 100644 index 0000000..64c303b --- /dev/null +++ b/docs/reference/repoBinPath.html @@ -0,0 +1,152 @@ + + + + + + + + +Construct path to full binary location — repoBinPath • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Construct path to full binary location

    + + +
    repoBinPath(path, type, Rversion)
    + +

    Arguments

    + + + + + + + + + + + + + + +
    path

    Destination download path. This path is the root folder of your new repository.

    type

    Possible values are (currently) "source", "mac.binary" and "win.binary": the binary types can be listed and downloaded but not installed on other platforms. Passed to download.packages().

    Rversion

    List with two named elements: major and minor. If not supplied, defaults to system version of R, using R.version. Only used if type is not "source"

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/repoPrefix.html b/docs/reference/repoPrefix.html new file mode 100644 index 0000000..1fe3d33 --- /dev/null +++ b/docs/reference/repoPrefix.html @@ -0,0 +1,190 @@ + + + + + + + + +Get the path to the repo directory containing the package files. — repoPrefix • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Get the path to the repo directory containing the package files.

    + + +
    repoPrefix(type, Rversion)
    + +

    Arguments

    + + + + + + + + + + +
    type

    character, indicating the type of package to download and install. See install.packages().

    Rversion

    Version of R. Can be specified as a character string with the two digit R version, e.g. "3.1". Defaults to R.version

    + +

    Value

    + +

    The filepath to the package files directory.

    + +

    Note

    + +

    Not all versions of R are compatible with with all package types (e.g., mac.binary.el-capitan is only valid for R > 3.4.0).

    + +

    Repo folder structure

    + + +

    The folder structure of a repository

      +
    • Root

        +
      • src/contrib

          +
        • PACKAGES

        • +
      • +
      • bin

          +
        • windows/contrib/version

            +
          • PACKAGES

          • +
        • +
        • macosx/contrib/version

            +
          • PACKAGES

          • +
        • +
        • macosx/el-capitan/contrib/version

            +
          • PACKAGES

          • +
        • +
        • macosx/leopard/contrib/version

            +
          • PACKAGES

          • +
        • +
        • macosx/mavericks/contrib/version

            +
          • PACKAGES

          • +
        • +
      • +
    • +
    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/twodigitRversion.html b/docs/reference/twodigitRversion.html new file mode 100644 index 0000000..1f671b7 --- /dev/null +++ b/docs/reference/twodigitRversion.html @@ -0,0 +1,150 @@ + + + + + + + + +Get a two-digit version of the R version — twodigitRversion • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Get a two-digit version of the R version

    + + +
    twodigitRversion(R = R.version)
    + +

    Arguments

    + + + + + + +
    R

    Either a list of the format R.version, a character string (e.g., "3.1.2"), or a numeric version of the type R_system_version().

    + +

    Value

    + +

    A character string representing the two-digit R version.

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/docs/reference/updatePackages.html b/docs/reference/updatePackages.html new file mode 100644 index 0000000..e1c0e13 --- /dev/null +++ b/docs/reference/updatePackages.html @@ -0,0 +1,252 @@ + + + + + + + + +Check for available package updates in a miniCRAN repo. — updatePackages • miniCRAN + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    oldPackages() indicates packages which have a (suitable) later version on the repositories whereas updatePackages() offers to download and install such packages.

    + + +
    oldPackages(path = NULL, repos = getOption("repos"),
    +  availPkgs = pkgAvail(repos = repos, type = type, Rversion = Rversion),
    +  method, availableLocal = pkgAvail(repos = path, type = type, Rversion =
    +  Rversion, quiet = quiet), type = "source", Rversion = R.version,
    +  quiet = FALSE)
    +
    +updatePackages(path = NULL, repos = getOption("repos"), method,
    +  ask = TRUE, availPkgs = pkgAvail(repos = repos, type = type, Rversion =
    +  Rversion), oldPkgs = NULL, type = "source", Rversion = R.version,
    +  quiet = FALSE)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    path

    Destination download path. This path is the root folder of your new repository.

    repos

    URL(s) of the 'contrib' sections of the repositories, e.g. "http://cran.us.r-project.org". Passed to available.packages()

    availPkgs

    Vector of available packages. Defaults to reading this list from CRAN, using available.packages()

    method

    Download method, see download.file().

    availableLocal

    all packages hosted in the miniCRAN repo, as returned by pkgAvail(). A subset can be specified; currently this must be in the same (character matrix) format as returned by pkgAvail().

    type

    Possible values are (currently) "source", "mac.binary" and "win.binary": the binary types can be listed and downloaded but not installed on other platforms. Passed to download.packages().

    Rversion

    List with two named elements: major and minor. If not supplied, defaults to system version of R, using R.version. Only used if type is not "source"

    quiet

    If TRUE, suppress status messages (if any), and the progress bar during download.

    ask

    logical indicating whether to ask user before packages are actually downloaded and installed, or the character string "graphics"``, which brings up a widget to allow the user to (de-)select from the list of packages which could be updated or added. The latter value only works on systems with a GUI version of [select.list()], and is otherwise equivalent toask = TRUE`.

    oldPkgs

    if specified as non-NULL, updatePackages() only considers these packages for updating. This may be a character vector of package names or a matrix as returned by oldPackages().

    + +

    Value

    + +

    oldPackages() returns a matrix with one row per package and columns for "Package", "LocalVer", "ReposVer" and "Repository". The matrix row names the package names. + +updatePackages returns NULL invisibly.

    + +

    Details

    + +

    These functions are based on update.packages(). However, rather than looking for locally installed packages they look for the package source and binaries in the miniCRAN repository.

    + +

    See also

    + +

    updatePackages(), pkgAvail().

    +

    Other update repo functions: addOldPackage, + addPackage, checkVersions, + makeRepo

    + + +

    Examples

    +
    ### `oldPackages` and `updatePackages` require an existing miniCRAN repo + +# Specify list of packages to download +revolution <- c(CRAN = getOption("minicran.mran")) +pkgs <- c("foreach") + +pdb <- cranJuly2014
    # NOT RUN { + pdb <- pkgAvail(repos = revolution, type = "source") +# }
    +pkgList <- pkgDep(pkgs, availPkgs = pdb, repos = revolution, type = "source", suggests = FALSE) +pkgList
    #> [1] "foreach" "codetools" "iterators"
    +
    # NOT RUN { + # Create temporary folder for miniCRAN + dir.create(pth <- file.path(tempdir(), "miniCRAN")) + + # create the miniCRAN directory structure but only add bin files + makeRepo(pkgList, path = pth, repos = revolution, type = "source", download = FALSE) + makeRepo(pkgList, path = pth, repos = revolution, type = "win.binary", download = TRUE) + + # download old source package version and create repo index + oldVers <- data.frame(package = c("foreach", "codetools", "iterators"), + version = c("1.4.0", "0.2-7", "1.0.5"), + stringsAsFactors = FALSE) + addOldPackage(pkgList, path = pth, repos = revolution, vers = oldVers$version, type = "source") + # NOTE: older binary versions would need to be build from source + + # Check if updated packages are available + oldPackages(path = pth, repos = revolution, type = "source") # should need update + oldPackages(path = pth, repos = revolution, type = "win.binary") # should be current + + # Update available packages + updatePackages(path = pth, repos = revolution, type = "source", ask = FALSE) # should need update + updatePackages(path = pth, repos = revolution, type = "win.binary") # should be current + + # Delete temporary folder + unlink(pth, recursive = TRUE) +# }
    +
    + +
    + + +
    + + +