Package 'pak'

Title: Another Approach to Package Installation
Description: The goal of 'pak' is to make package installation faster and more reliable. In particular, it performs all HTTP operations in parallel, so metadata resolution and package downloads are fast. Metadata and package files are cached on the local disk as well. 'pak' has a dependency solver, so it finds version conflicts before performing the installation. This version of 'pak' supports CRAN, 'Bioconductor' and 'GitHub' packages as well.
Authors: Gábor Csárdi [aut, cre], Jim Hester [aut], Posit Software, PBC [cph, fnd], Winston Chang [ctb] (R6, callr, processx), Ascent Digital Services [cph, fnd] (callr, processx), Hadley Wickham [ctb, cph] (cli, curl, pkgbuild), Jeroen Ooms [ctb] (curl, jsonlite), Maëlle Salmon [ctb] (desc, pkgsearch), Duncan Temple Lang [ctb] (jsonlite), Lloyd Hilaiel [cph] (jsonlite), Michel Berkelaar and lpSolve authors [ctb] (lpSolve), R Consortium [fnd] (pkgsearch), Jay Loden [ctb] (ps), Dave Daeschler [ctb] (ps), Giampaolo Rodola [ctb] (ps), Kuba Podgórski [ctb] (zip), Rich Geldreich [ctb] (zip)
Maintainer: Gábor Csárdi <[email protected]>
License: GPL-3
Version: 0.8.0.9000
Built: 2024-12-27 19:19:08 UTC
Source: https://github.com/r-lib/pak

Help Index


Package cache utilities

Description

Various utilities to inspect and clean the package cache. See the pkgcache package if you need for control over the package cache.

Usage

cache_summary()

cache_list(...)

cache_delete(...)

cache_clean()

Arguments

...

For cache_list() and cache_delete(), ... may contain filters, where the argument name is the column name. E.g. package, version, etc. Call cache_list() without arguments to see the available column names. If you call cache_delete() without arguments, it will delete all cached files.

Details

cache_summary() returns a summary of the package cache.

cache_list() lists all (by default), or a subset of packages in the package cache.

cache_delete() deletes files from the cache.

cache_clean() deletes all files from the cache.

Value

cache_summary() returns a list with elements:

  • cachepath: absolute path to the package cache

  • files: number of files (packages) in the cache

  • size: total size of package cache in bytes

cache_list() returns a data frame with the data about the cache.

cache_delete() returns nothing.

cache_clean() returns nothing.

Examples

cache_summary()
#> $cachepath                                                              
#> [1] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/pkg"  
#>                                                                         
#> $files                                                                  
#> [1] 483                                                                 
#>                                                                         
#> $size                                                                   
#> [1] 654662486                                                           
#>                                                                         
cache_list()
#> # A data frame: 483 × 11                                                
#>    fullpath       path  package url   etag  sha256 version platf…¹ built
#>    <chr>          <chr> <chr>   <chr> <chr> <chr>  <chr>   <chr>   <int>
#>  1 /Users/gaborc… arch… NA      http… "\"1… 0c8f0… NA      NA         NA
#>  2 /Users/gaborc… bin/… evalua… http… "\"1… 08a39… 0.17    aarch6…    NA
#>  3 /Users/gaborc… bin/… crayon  http… "\"2… 1e6d5… 1.5.2   aarch6…    NA
#>  4 /Users/gaborc… bin/… common… http… "\"4… 47b4a… 1.8.1   aarch6…    NA
#>  5 /Users/gaborc… bin/… curl    http… "\"b… 7b8ba… 4.3.3   aarch6…    NA
#>  6 /Users/gaborc… bin/… tinytex http… "\"2… 7e9ba… 0.42    aarch6…    NA
#>  7 /Users/gaborc… bin/… jsonli… http… "\"1… 68e59… 1.8.2   aarch6…    NA
#>  8 /Users/gaborc… bin/… lifecy… http… "\"1… 7ce27… 1.0.3   aarch6…    NA
#>  9 /Users/gaborc… bin/… vctrs   http… "\"1… c3a69… 0.4.2   aarch6…    NA
#> 10 /Users/gaborc… src/… pkgcac… NA     NA   9b70a… NA      NA          0
#> # … with 473 more rows, 2 more variables: vignettes <int>,              
#> #   rversion <chr>, and abbreviated variable name ¹​platform            
cache_list(package = "recipes")
#> # A data frame: 1 × 11                                                  
#>   fullp…¹ path  package url   etag  sha256 version platf…² built vigne…³
#>   <chr>   <chr> <chr>   <chr> <chr> <chr>  <chr>   <chr>   <int>   <int>
#> 1 /Users… bin/… recipes http… "\"1… e281e… 1.0.2   aarch6…    NA      NA
#> # … with 1 more variable: rversion <chr>, and abbreviated variable      
#> #   names ¹​fullpath, ²​platform, ³​vignettes                           
cache_list(platform = "source")
#> # A data frame: 69 × 11                                                 
#>    fullpath       path  package url   etag  sha256 version platf…¹ built
#>    <chr>          <chr> <chr>   <chr> <chr> <chr>  <chr>   <chr>   <int>
#>  1 /Users/gaborc… src/… crayon  http… "\"9… 70a9a… 1.5.2   source     NA
#>  2 /Users/gaborc… src/… zip     http… "\"1… 14873… 2.2.1   source     NA
#>  3 /Users/gaborc… src/… curl    http… "\"a… 3567b… 4.3.3   source     NA
#>  4 /Users/gaborc… src/… rlang   http… "\"b… e6973… 1.0.6   source     NA
#>  5 /Users/gaborc… src/… openssl http… "\"1… 7cde9… 2.0.3   source     NA
#>  6 /Users/gaborc… src/… tinytex http… "\"8… 205f7… 0.42    source     NA
#>  7 /Users/gaborc… src/… evalua… http… "\"6… 49c74… 0.17    source     NA
#>  8 /Users/gaborc… src/… Rcpp    http… "\"2… 807ce… 1.0.9   source     NA
#>  9 /Users/gaborc… src/… knitr   http… "\"d… 9b8f9… 1.40    source     NA
#> 10 /Users/gaborc… src/… lpSolve http… "\"7… f7258… 5.6.17  source     NA
#> # … with 59 more rows, 2 more variables: vignettes <int>,               
#> #   rversion <chr>, and abbreviated variable name ¹​platform            
cache_delete(package = "knitr")
cache_delete(platform = "macos")
cache_clean()

Frequently Asked Questions

Description

Please take a look at this list before asking questions.

Package installation

How do I reinstall a package?

pak does not reinstall a package, if the same version is already installed. Sometimes you still want a reinstall, e.g. to fix a broken installation. In this case you can delete the package and then install it, or use the ?reinstall parameter:

pak::pkg_install("tibble")
#>                                                                         
#> → Will install 13 packages.                                             
#> → All 13 packages (7.68 MB) are cached.                                 
#> + cli         3.3.0                                                     
#> + crayon      1.5.1                                                     
#> + ellipsis    0.3.2                                                     
#> + fansi       1.0.3                                                     
#> + glue        1.6.2                                                     
#> + lifecycle   1.0.1                                                     
#> + magrittr    2.0.3                                                     
#> + pillar      1.7.0                                                     
#> + pkgconfig   2.0.3                                                     
#> + rlang       1.0.2                                                     
#> + tibble      3.1.7                                                     
#> + utf8        1.2.2                                                     
#> + vctrs       0.4.1                                                     
#>  No downloads are needed, 13 pkgs (7.68 MB) are cached                 
#>  Got utf8 1.2.2 (aarch64-apple-darwin20) (209.24 kB)                   
#>  Installed cli 3.3.0  (76ms)                                           
#>  Installed crayon 1.5.1  (87ms)                                        
#>  Installed ellipsis 0.3.2  (97ms)                                      
#>  Installed fansi 1.0.3  (103ms)                                        
#>  Installed glue 1.6.2  (111ms)                                         
#>  Installed lifecycle 1.0.1  (153ms)                                    
#>  Installed magrittr 2.0.3  (158ms)                                     
#>  Installed pillar 1.7.0  (162ms)                                       
#>  Installed pkgconfig 2.0.3  (87ms)                                     
#>  Installed rlang 1.0.2  (39ms)                                         
#>  Installed tibble 3.1.7  (41ms)                                        
#>  Installed utf8 1.2.2  (39ms)                                          
#>  Installed vctrs 0.4.1  (32ms)                                         
#>  1 pkg + 12 deps: added 13, dld 1 (209.24 kB) [1.8s]                   
pak::pkg_install("tibble?reinstall")
#>                                                                         
#> → Will install 1 package.                                               
#> → The package (724.32 kB) is cached.                                    
#> + tibble   3.1.7                                                        
#>  No downloads are needed, 1 pkg (724.32 kB) is cached                  
#>  Installed tibble 3.1.7  (42ms)                                        
#>  1 pkg + 12 deps: kept 11, added 1 [343ms]                             

How do I install a dependency from a binary package

Sometimes it is sufficient to install the binary package of an older version of a dependency, instead of the newer source package that potentially needs compilers, system tools or libraries.

pkg_install() and lockfile_create() default to upgrade = FALSE, which always chooses binaries over source packages, so if you use pkg_install() you don't need to do anything extra.

The ⁠local_install_*⁠ functions default to upgrade = TRUE, as does pak() with pkg = NULL, so for these you need to explicitly use upgrade = FALSE.

How do I install a package from source?

To force the installation of a source package (instead of a binary package), use the ?source parameter:

pak::pkg_install("tibble?source")
#>                                                                         
#> → Will install 1 package.                                               
#> → The package (672.34 kB) is cached.                                    
#> + tibble   3.1.7 👷🏼‍♀️🔧                                                 
#>  No downloads are needed, 1 pkg (672.34 kB) is cached                  
#>  Building tibble 3.1.7                                                 
#>  Built tibble 3.1.7 (3.1s)                                             
#>  Installed tibble 3.1.7  (35ms)                                        
#>  1 pkg + 12 deps: kept 11, added 1 [4.1s]                              

How do I install the latest version of a dependency?

If you want to always install a dependency from source, because you want the latest version or some other reason, you can use the source parameter with the ⁠<package>=⁠ form: ⁠<package>=?source⁠. For example to install tibble, with its cli dependency installed from source you could write:

pak::pkg_install(c("tibble", "cli=?source"))
#>                                                                         
#> → Will install 1 package.                                               
#> → The package (540.04 kB) is cached.                                    
#> + cli   3.3.0 👷🏽🔧                                                       
#>  No downloads are needed, 1 pkg (540.04 kB) is cached                  
#>  Building cli 3.3.0                                                    
#>  Built cli 3.3.0 (4.5s)                                                
#>  Installed cli 3.3.0  (68ms)                                           
#>  1 pkg + 12 deps: kept 11, added 1 [4.9s]                              

How do I ignore an optional dependency?

pak::pkg_install(
  c("tibble", "DiagrammeR=?ignore", "formattable=?ignore"),
  dependencies = TRUE
)
#>                                                                         
#>  No downloads are needed                                               
#>  1 pkg + 12 deps: kept 12 [583ms]                                      

The syntax is

<packagename>=?ignore

Note that you can only ignore optional dependencies, i.e. packages in Suggests and Enhances.

Others

How can I use pak with renv?

Since version 1.0.0 renv has official support for using pak. This needs to be enabled with the renv.config.pak.enabled option or the RENV_CONFIG_PAK_ENABLED environment variable set to TRUE. For more information see the renv documentation.


Simplified manual. Start here!

Description

You don't need to read long manual pages for a simple task. This manual page collects the most common pak use cases.

Package installation

Install a package from CRAN or Bioconductor

pak::pkg_install("tibble")

tldr-cran.svg

pak automatically sets a CRAN repository and the Bioconductor repositories that correspons to the current R version.

Install a package from GitHub

pak::pkg_install("tidyverse/tibble")
#>                                                                         
#> → Will update 2 packages.                                               
#> → All 2 packages (0 B) are cached.                                      
#> + tibble 3.1.8 → 3.1.8.9002 👷🏻🔧 (GitHub: 37ec86a)                       
#> + vctrs  0.5.1 → 0.5.1.9000 👷🏾‍♀️🔧 (GitHub: 2d7de76)                    
#>  No downloads are needed, 2 pkgs are cached                            
#>  Packaging vctrs 0.5.1.9000                                            
#>  Packaged vctrs 0.5.1.9000 (1.4s)                                      
#>  Building vctrs 0.5.1.9000                                             
#>  Built vctrs 0.5.1.9000 (11.2s)                                        
#>  Installed vctrs 0.5.1.9000 (github::r-lib/vctrs@2d7de76) (34ms)       
#>  Packaging tibble 3.1.8.9002                                           
#>  Packaged tibble 3.1.8.9002 (502ms)                                    
#>  Building tibble 3.1.8.9002                                            
#>  Built tibble 3.1.8.9002 (2.7s)                                        
#>  Installed tibble 3.1.8.9002 (github::tidyverse/tibble@37ec86a) (28ms) 
#>  1 pkg + 10 deps: kept 9, upd 2 [17.5s]                                

Use the user/repo form. You can specify a branch or tag: user/repo@branch or user/repo@tag.

Install a package from a URL

pak::pkg_install(
  "url::https://cran.r-project.org/src/contrib/Archive/tibble/tibble_3.1.7.tar.gz"
)
#>                                                                         
#> → Will install 1 package.                                               
#> → Will update 1 package.                                                
#> → All 2 packages (38.65 kB) are cached.                                 
#> + ellipsis              0.3.2                                           
#> + tibble   3.1.8.9002 → 3.1.7 👷🏻‍♀️🔧                                    
#>  No downloads are needed, 2 pkgs (38.65 kB) are cached                 
#>  Installed ellipsis 0.3.2  (18ms)                                      
#>  Building tibble 3.1.7                                                 
#>  Built tibble 3.1.7 (2.5s)                                             
#>  Installed tibble 3.1.7  (31ms)                                        
#>  1 pkg + 11 deps: kept 10, upd 1, added 1 [3.3s]                       

The URL may point to an R package file, made with ⁠R CMD build⁠, or a .tar.gz or .zip archive of a package tree.

Package updates

Update a package

pak::pkg_install("tibble")
#>                                                                         
#> → Will update 1 package.                                                
#> → The package (724.32 kB) is cached.                                    
#> + tibble 3.1.7 → 3.1.8                                                  
#>  No downloads are needed, 1 pkg (724.32 kB) is cached                  
#>  Installed tibble 3.1.8  (36ms)                                        
#>  1 pkg + 10 deps: kept 10, upd 1 [368ms]                               

pak::pkg_install() automatically updates the package.

Update all dependencies of a package

pak::pkg_install("tibble", upgrade = TRUE)
#>                                                                         
#>  No downloads are needed                                               
#>  1 pkg + 10 deps: kept 11 [278ms]                                      

upgrade = TRUE updates the package itself and all of its dependencies, if necessary.

Reinstall a package

Add ?reinstall to the package name or package reference in general:

pak::pkg_install("tibble?reinstall")
#>                                                                         
#> → Will install 1 package.                                               
#> → The package (724.32 kB) is cached.                                    
#> + tibble   3.1.8                                                        
#>  No downloads are needed, 1 pkg (724.32 kB) is cached                  
#>  Installed tibble 3.1.8  (60ms)                                        
#>  1 pkg + 10 deps: kept 10, added 1 [340ms]                             

Dependency lookup

Dependencies of a CRAN or Bioconductor package

pak::pkg_deps("tibble")
#> # A data frame: 11 × 32                                                 
#>    ref       type  direct direc…¹ status package version license needs…²
#>    <chr>     <chr> <lgl>  <lgl>   <chr>  <chr>   <chr>   <chr>   <lgl>  
#>  1 cli       stan… FALSE  FALSE   OK     cli     3.4.1   MIT + … FALSE  
#>  2 fansi     stan… FALSE  FALSE   OK     fansi   1.0.3   GPL-2 … FALSE  
#>  3 glue      stan… FALSE  FALSE   OK     glue    1.6.2   MIT + … FALSE  
#>  4 lifecycle stan… FALSE  FALSE   OK     lifecy… 1.0.3   MIT + … FALSE  
#>  5 magrittr  stan… FALSE  FALSE   OK     magrit… 2.0.3   MIT + … FALSE  
#>  6 pillar    stan… FALSE  FALSE   OK     pillar  1.8.1   MIT + … FALSE  
#>  7 pkgconfig stan… FALSE  FALSE   OK     pkgcon… 2.0.3   MIT + … FALSE  
#>  8 rlang     stan… FALSE  FALSE   OK     rlang   1.0.6   MIT + … FALSE  
#>  9 tibble    stan… TRUE   TRUE    OK     tibble  3.1.8   MIT + … FALSE  
#> 10 utf8      stan… FALSE  FALSE   OK     utf8    1.2.2   Apache… FALSE  
#> 11 vctrs     stan… FALSE  FALSE   OK     vctrs   0.5.1   MIT + … FALSE  
#> # … with 23 more variables: priority <chr>, md5sum <chr>, sha256 <chr>, 
#> #   filesize <int>, built <chr>, platform <chr>, rversion <chr>,        
#> #   repotype <chr>, repodir <chr>, target <chr>, deps <list>,           
#> #   mirror <chr>, sources <list>, remote <list>, error <list>,          
#> #   metadata <list>, dep_types <list>, params <list>, sysreqs <chr>,    
#> #   cache_status <chr>, lib_status <chr>, old_version <chr>,            
#> #   new_version <chr>, and abbreviated variable names ¹​directpkg, …    

The results are returned in a data frame.

Dependency tree of a CRAN / Bioconductor package

pak::pkg_deps_tree("tibble")
#> tibble 3.1.8                                                           
#> ├─fansi 1.0.3                                                          
#> ├─lifecycle 1.0.3                                                      
#> │ ├─cli 3.4.1                                                          
#> │ ├─glue 1.6.2                                                         
#> │ └─rlang 1.0.6                                                        
#> ├─magrittr 2.0.3                                                       
#> ├─pillar 1.8.1                                                         
#> │ ├─cli                                                                 
#> │ ├─fansi                                                               
#> │ ├─glue                                                                
#> │ ├─lifecycle                                                           
#> │ ├─rlang                                                               
#> │ ├─utf8 1.2.2                                                         
#> │ └─vctrs 0.5.1                                                        
#> │   ├─cli                                                               
#> │   ├─glue                                                              
#> │   ├─lifecycle                                                         
#> │   └─rlang                                                             
#> ├─pkgconfig 2.0.3                                                      
#> ├─rlang                                                                 
#> └─vctrs                                                                 
#>                                                                         
#> Key:   new                                                             

The results are also silently returned in a data frame.

Dependency tree of a package on GitHub

pak::pkg_deps_tree("tidyverse/tibble")
#> tidyverse/tibble 3.1.8.9002 ✨👷🏼🔧                                        
#> ├─fansi 1.0.3                                                          
#> ├─lifecycle 1.0.3                                                      
#> │ ├─cli 3.4.1                                                          
#> │ ├─glue 1.6.2                                                         
#> │ └─rlang 1.0.6                                                        
#> ├─magrittr 2.0.3                                                       
#> ├─pillar 1.8.1                                                         
#> │ ├─cli                                                                 
#> │ ├─fansi                                                               
#> │ ├─glue                                                                
#> │ ├─lifecycle                                                           
#> │ ├─rlang                                                               
#> │ ├─utf8 1.2.2                                                         
#> │ └─r-lib/vctrs 0.5.1.9000 ✨👷🏼🔧                                         
#> │   ├─cli                                                               
#> │   ├─glue                                                              
#> │   ├─lifecycle                                                         
#> │   └─rlang                                                             
#> ├─pkgconfig 2.0.3                                                      
#> ├─rlang                                                                 
#> └─r-lib/vctrs                                                           
#>                                                                         
#> Key:   new | 👷🏼 build | 🔧 compile                                      

Use the user/repo form. As usual, you can also select a branch, tag, or sha, with the user/repo@branch, user/repo@tag or user/repo@sha forms.

Dependency tree of the package in the current directory

pak::local_deps_tree("tibble")
#> local::tibble 3.1.8 ✨👷🏻‍♀️🔧                                             
#> ├─fansi 1.0.3                                                          
#> ├─lifecycle 1.0.3                                                      
#> │ ├─cli 3.4.1                                                          
#> │ ├─glue 1.6.2                                                         
#> │ └─rlang 1.0.6                                                        
#> ├─magrittr 2.0.3                                                       
#> ├─pillar 1.8.1                                                         
#> │ ├─cli                                                                 
#> │ ├─fansi                                                               
#> │ ├─glue                                                                
#> │ ├─lifecycle                                                           
#> │ ├─rlang                                                               
#> │ ├─utf8 1.2.2                                                         
#> │ └─vctrs 0.5.1                                                        
#> │   ├─cli                                                               
#> │   ├─glue                                                              
#> │   ├─lifecycle                                                         
#> │   └─rlang                                                             
#> ├─pkgconfig 2.0.3                                                      
#> ├─rlang                                                                 
#> └─vctrs                                                                 
#>                                                                         
#> Key:   new | 👷🏻‍♀️ build | 🔧 compile                                   

Assuming package is in directory tibble.

Explain a recursive dependency

How does tibble depend on rlang?

pak::pkg_deps_explain("tibble", "rlang")
#> tibble -> lifecycle -> rlang                                            
#> tibble -> pillar -> lifecycle -> rlang                                  
#> tibble -> pillar -> rlang                                               
#> tibble -> pillar -> vctrs -> lifecycle -> rlang                         
#> tibble -> pillar -> vctrs -> rlang                                      
#> tibble -> rlang                                                         
#> tibble -> vctrs -> lifecycle -> rlang                                   
#> tibble -> vctrs -> rlang                                                

Use can also use the user/repo form for packages from GitHub, url::... for packages at URLs, etc.

Package development

Install dependencies of local package

pak::local_install_deps()
#>  Loading metadata database ... done                                    
#>                                                                         
#> → The package (0 B) is cached.                                          
#>  No downloads are needed                                               
#>  10 deps: kept 10 [3.2s]                                               

Install local package

pak::local_install()
#>                                                                         
#> → Will update 1 package.                                                
#> → The package (0 B) is cached.                                          
#> + tibble 3.1.8 → 3.1.8 👷🏻‍♂️🔧                                           
#>  No downloads are needed, 1 pkg is cached                              
#>  Got tibble 3.1.8 (source) (96 B)                                      
#>  Packaging tibble 3.1.8                                                
#>  Packaged tibble 3.1.8 (864ms)                                         
#>  Building tibble 3.1.8                                                 
#>  Built tibble 3.1.8 (2.4s)                                             
#>  Installed tibble 3.1.8 (local) (38ms)                                 
#>  1 pkg + 10 deps: kept 10, upd 1, dld 1 (NA B) [4.2s]                  

Install all dependencies of local package

pak::local_install_dev_deps()
#>                                                                         
#> → Will install 86 packages.                                             
#> → Will update 2 packages.                                               
#> → All 89 packages (100.53 MB) are cached.                               
#> + askpass                1.1                                            
#> + base64enc              0.1-3                                          
#> + bench                  1.1.2                                          
#> + bit                    4.0.5                                          
#> + bit64                  4.0.5                                          
#> + blob                   1.2.3                                          
#> + brio                   1.1.3                                          
#> + bslib                  0.4.1                                          
#> + cachem                 1.0.6                                          
#> + callr                  3.7.3                                          
#> + clipr                  0.8.0                                          
#> + colorspace             2.0-3                                          
#> + covr                   3.6.1                                          
#> + crayon                 1.5.2                                          
#> + curl                   4.3.3                                          
#> + desc                   1.4.2                                          
#> + DiagrammeR             1.0.9                                          
#> + diffobj                0.3.5                                          
#> + digest                 0.6.31                                         
#> + downloader             0.4                                            
#> + dplyr                  1.0.10                                         
#> + evaluate               0.19    👷🏿‍♂️                                  
#> + farver                 2.1.1                                          
#> + fastmap                1.1.0                                          
#> + formattable            0.2.1                                          
#> + fs                     1.5.2                                          
#> + generics               0.1.3                                          
#> + ggplot2                3.4.0                                          
#> + gridExtra              2.3                                            
#> + gtable                 0.3.1                                          
#> + highr                  0.9                                            
#> + hms                    1.1.2                                          
#> + htmltools              0.5.4                                          
#> + htmlwidgets            1.6.0   👷🏾‍♂️                                  
#> + httr                   1.4.4                                          
#> + igraph                 1.3.5                                          
#> + influenceR             0.1.0.1                                        
#> + isoband                0.2.6                                          
#> + jquerylib              0.1.4                                          
#> + jsonlite               1.8.4                                          
#> + knitr                  1.41                                           
#> + labeling               0.4.2                                          
#> + lazyeval               0.2.2                                          
#> + lubridate              1.9.0                                          
#> + Matrix       1.5-1   → 1.5-3                                          
#> + memoise                2.0.1                                          
#> + mime                   0.12                                           
#> + mockr                  0.2.0                                          
#> + munsell                0.5.0                                          
#> + nlme         3.1-160 → 3.1-161 👷‍♂️🔧                                  
#> + nycflights13           1.0.2                                          
#> + openssl                2.0.5                                          
#> + pkgbuild               1.4.0                                          
#> + pkgload                1.3.2                                          
#> + praise                 1.0.0                                          
#> + prettyunits            1.1.1                                          
#> + processx               3.8.0                                          
#> + profmem                0.6.0                                          
#> + ps                     1.7.2                                          
#> + purrr                  0.3.5                                          
#> + R6                     2.5.1                                          
#> + rappdirs               0.3.3                                          
#> + RColorBrewer           1.1-3                                          
#> + readr                  2.1.3                                          
#> + rematch2               2.1.2                                          
#> + rex                    1.2.1                                          
#> + rmarkdown              2.19    👷‍♂️                                   
#> + rprojroot              2.0.3                                          
#> + rstudioapi             0.14                                           
#> + sass                   0.4.4                                          
#> + scales                 1.2.1                                          
#> + stringi                1.7.8                                          
#> + stringr                1.5.0                                          
#> + sys                    3.4.1                                          
#> + testthat               3.1.6                                          
#> + tidyr                  1.2.1                                          
#> + tidyselect             1.2.0                                          
#> + timechange             0.1.1                                          
#> + tinytex                0.43    👷🏻‍♂️                                  
#> + tzdb                   0.3.0                                          
#> + viridis                0.6.2                                          
#> + viridisLite            0.4.1                                          
#> + visNetwork             2.1.2                                          
#> + vroom                  1.6.0                                          
#> + waldo                  0.4.0                                          
#> + withr                  2.5.0                                          
#> + xfun                   0.35                                           
#> + yaml                   2.3.6                                          
#>  No downloads are needed, 88 pkgs (100.53 MB) are cached               
#>  Packaging tibble 3.1.8                                                
#>  Building evaluate 0.19                                                
#>  Building nlme 3.1-161                                                 
#>  Installed R6 2.5.1  (31ms)                                            
#>  Installed DiagrammeR 1.0.9  (76ms)                                    
#>  Installed RColorBrewer 1.1-3  (72ms)                                  
#>  Installed askpass 1.1  (79ms)                                         
#>  Installed Matrix 1.5-3  (137ms)                                       
#>  Installed base64enc 0.1-3  (125ms)                                    
#>  Installed bench 1.1.2  (90ms)                                         
#>  Installed bit64 4.0.5  (44ms)                                         
#>  Installed bit 4.0.5  (43ms)                                           
#>  Installed blob 1.2.3  (41ms)                                          
#>  Installed brio 1.1.3  (40ms)                                          
#>  Installed cachem 1.0.6  (31ms)                                        
#>  Installed callr 3.7.3  (53ms)                                         
#>  Installed clipr 0.8.0  (89ms)                                         
#>  Installed colorspace 2.0-3  (99ms)                                    
#>  Installed covr 3.6.1  (58ms)                                          
#>  Installed crayon 1.5.2  (75ms)                                        
#>  Installed curl 4.3.3  (83ms)                                          
#>  Packaged tibble 3.1.8 (684ms)                                         
#>  Installed bslib 0.4.1  (315ms)                                        
#>  Installed desc 1.4.2  (77ms)                                          
#>  Installed diffobj 0.3.5  (68ms)                                       
#>  Installed digest 0.6.31  (60ms)                                       
#>  Installed downloader 0.4  (39ms)                                      
#>  Installed dplyr 1.0.10  (39ms)                                        
#>  Installed farver 2.1.1  (41ms)                                        
#>  Installed fastmap 1.1.0  (38ms)                                       
#>  Installed formattable 0.2.1  (43ms)                                   
#>  Built evaluate 0.19 (903ms)                                           
#>  Installed fs 1.5.2  (49ms)                                            
#>  Installed generics 0.1.3  (46ms)                                      
#>  Installed ggplot2 3.4.0  (65ms)                                       
#>  Installed gridExtra 2.3  (43ms)                                       
#>  Installed gtable 0.3.1  (38ms)                                        
#>  Installed highr 0.9  (37ms)                                           
#>  Installed hms 1.1.2  (39ms)                                           
#>  Installed htmltools 0.5.4  (40ms)                                     
#>  Installed httr 1.4.4  (40ms)                                          
#>  Installed influenceR 0.1.0.1  (17ms)                                  
#>  Installed igraph 1.3.5  (96ms)                                        
#>  Installed isoband 0.2.6  (68ms)                                       
#>  Installed jquerylib 0.1.4  (38ms)                                     
#>  Installed jsonlite 1.8.4  (37ms)                                      
#>  Installed labeling 0.4.2  (14ms)                                      
#>  Installed knitr 1.41  (73ms)                                          
#>  Installed lazyeval 0.2.2  (43ms)                                      
#>  Installed lubridate 1.9.0  (38ms)                                     
#>  Installed memoise 2.0.1  (39ms)                                       
#>  Installed mime 0.12  (58ms)                                           
#>  Installed mockr 0.2.0  (38ms)                                         
#>  Installed munsell 0.5.0  (36ms)                                       
#>  Installed nycflights13 1.0.2  (37ms)                                  
#>  Installed openssl 2.0.5  (41ms)                                       
#>  Installed pkgbuild 1.4.0  (39ms)                                      
#>  Installed pkgload 1.3.2  (37ms)                                       
#>  Installed praise 1.0.0  (35ms)                                        
#>  Installed prettyunits 1.1.1  (56ms)                                   
#>  Installed processx 3.8.0  (37ms)                                      
#>  Installed profmem 0.6.0  (37ms)                                       
#>  Installed ps 1.7.2  (37ms)                                            
#>  Installed purrr 0.3.5  (38ms)                                         
#>  Installed rappdirs 0.3.3  (37ms)                                      
#>  Installed readr 2.1.3  (42ms)                                         
#>  Installed rematch2 2.1.2  (41ms)                                      
#>  Installed rex 1.2.1  (58ms)                                           
#>  Installed rprojroot 2.0.3  (58ms)                                     
#>  Installed rstudioapi 0.14  (40ms)                                     
#>  Installed sass 0.4.4  (42ms)                                          
#>  Installed scales 1.2.1  (39ms)                                        
#>  Installed stringr 1.5.0  (33ms)                                       
#>  Installed sys 3.4.1  (49ms)                                           
#>  Installed testthat 3.1.6  (88ms)                                      
#>  Installed tidyr 1.2.1  (77ms)                                         
#>  Installed stringi 1.7.8  (195ms)                                      
#>  Installed tidyselect 1.2.0  (113ms)                                   
#>  Installed timechange 0.1.1  (55ms)                                    
#>  Installed tzdb 0.3.0  (40ms)                                          
#>  Installed viridisLite 0.4.1  (39ms)                                   
#>  Installed viridis 0.6.2  (39ms)                                       
#>  Installed visNetwork 2.1.2  (77ms)                                    
#>  Installed vroom 1.6.0  (77ms)                                         
#>  Installed waldo 0.4.0  (62ms)                                         
#>  Installed withr 2.5.0  (40ms)                                         
#>  Installed xfun 0.35  (39ms)                                           
#>  Building tinytex 0.43                                                 
#>  Installed yaml 2.3.6  (43ms)                                          
#>  Installed evaluate 0.19  (15ms)                                       
#>  Built tinytex 0.43 (1.1s)                                             
#>  Installed tinytex 0.43  (15ms)                                        
#>  Building rmarkdown 2.19                                               
#>  Built rmarkdown 2.19 (3.9s)                                           
#>  Installed rmarkdown 2.19  (85ms)                                      
#>  Building htmlwidgets 1.6.0                                            
#>  Built nlme 3.1-161 (8s)                                               
#>  Installed nlme 3.1-161  (33ms)                                        
#>  Built htmlwidgets 1.6.0 (1.1s)                                        
#>  Installed htmlwidgets 1.6.0  (22ms)                                   
#>  103 deps: kept 15, upd 2, added 86 [10.2s]                            

Installs development and optional dependencies as well.

Repositories

List current repositories

pak::repo_get()
#> # A data frame: 5 × 5                                                   
#>   name          url                                type  r_ver…¹ bioc_…²
#> * <chr>         <chr>                              <chr> <chr>   <chr>  
#> 1 CRAN          https://cloud.r-project.org        cran  *       NA     
#> 2 BioCsoft      https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 3 BioCann       https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 4 BioCexp       https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 5 BioCworkflows https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> # … with abbreviated variable names ¹​r_version, ²​bioc_version         

If you haven't set a CRAN or Bioconductor repository, pak does that automatically.

Add custom repository

pak::repo_add(rhub = 'https://r-hub.r-universe.dev')
pak::repo_get()
#> # A data frame: 6 × 5                                                   
#>   name          url                                type  r_ver…¹ bioc_…²
#> * <chr>         <chr>                              <chr> <chr>   <chr>  
#> 1 CRAN          https://cloud.r-project.org        cran  *       NA     
#> 2 rhub          https://r-hub.r-universe.dev       cran… *       NA     
#> 3 BioCsoft      https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 4 BioCann       https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 5 BioCexp       https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 6 BioCworkflows https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> # … with abbreviated variable names ¹​r_version, ²​bioc_version         

Remove custom repositories

options(repos = getOption("repos")["CRAN"])
pak::repo_get()
#> # A data frame: 5 × 5                                                   
#>   name          url                                type  r_ver…¹ bioc_…²
#> * <chr>         <chr>                              <chr> <chr>   <chr>  
#> 1 CRAN          https://cloud.r-project.org        cran  *       NA     
#> 2 BioCsoft      https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 3 BioCann       https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 4 BioCexp       https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 5 BioCworkflows https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> # … with abbreviated variable names ¹​r_version, ²​bioc_version         

If you set the repos option to a CRAN repo only, or unset it completely, then pak keeps only CRAN and (by default) Bioconductor.

Time travel using RSPM

pak::repo_add(CRAN = "RSPM@2022-06-30")
pak::repo_get()
#> # A data frame: 5 × 5                                                   
#>   name          url                                type  r_ver…¹ bioc_…²
#> * <chr>         <chr>                              <chr> <chr>   <chr>  
#> 1 CRAN          https://packagemanager.posit.co/c… cran  *       NA     
#> 2 BioCsoft      https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 3 BioCann       https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 4 BioCexp       https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 5 BioCworkflows https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> # … with abbreviated variable names ¹​r_version, ²​bioc_version         

Sets a repository that is equivalent to CRAN's state closest to the specified date. Name this repository CRAN, otherwise pak will also add a default CRAN repository.

Time travel using MRAN

pak::repo_add(CRAN = "MRAN@2022-06-30")
pak::repo_get()
#> # A data frame: 5 × 5                                                   
#>   name          url                                type  r_ver…¹ bioc_…²
#> * <chr>         <chr>                              <chr> <chr>   <chr>  
#> 1 CRAN          https://cran.microsoft.com/snapsh… cran  *       NA     
#> 2 BioCsoft      https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 3 BioCann       https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 4 BioCexp       https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 5 BioCworkflows https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> # … with abbreviated variable names ¹​r_version, ²​bioc_version         

Sets a repository that is equivalent to CRAN's state at the specified date. Name this repository CRAN, otherwise pak will also add a default CRAN repository.

Caches

By default pak caches both metadata and downloaded packages.

Inspect metadata cache

pak::meta_list()
#>  Updated metadata database: 4.55 MB in 4 files.                        
#>  Updating metadata database ... done                                   
#> # A data frame: 43,718 × 32                                             
#>    package version depends sugge…¹ license imports linki…² archs enhan…³
#>    <chr>   <chr>   <chr>   <chr>   <chr>   <chr>   <chr>   <chr> <chr>  
#>  1 A3      1.0.0   R (>= … random… GPL (>… NA      NA      NA    NA     
#>  2 AATtoo… 0.0.1   R (>= … NA      GPL-3   magrit… NA      NA    NA     
#>  3 ABACUS  1.0.0   R (>= … rmarkd… GPL-3   ggplot… NA      NA    NA     
#>  4 ABC.RAP 0.9.0   R (>= … knitr,… GPL-3   graphi… NA      NA    NA     
#>  5 ABCana… 1.2.1   R (>= … NA      GPL-3   plotrix NA      NA    NA     
#>  6 ABCopt… 0.15.0  NA      testth… MIT + … Rcpp, … Rcpp    ABCo… NA     
#>  7 ABCp2   1.2     MASS    NA      GPL-2   NA      NA      NA    NA     
#>  8 ABHgen… 1.0.1   NA      knitr,… GPL-3   ggplot… NA      NA    NA     
#>  9 ABPS    0.3     NA      testth… GPL (>… kernlab NA      NA    NA     
#> 10 ACA     1.1     R (>= … NA      GPL     graphi… NA      NA    NA     
#> # … with 43,708 more rows, 23 more variables: os_type <chr>,            
#> #   priority <chr>, license_is_foss <chr>, license_restricts_use <chr>, 
#> #   repodir <chr>, rversion <chr>, platform <chr>,                      
#> #   needscompilation <chr>, ref <chr>, type <chr>, direct <lgl>,        
#> #   status <chr>, target <chr>, mirror <chr>, sources <list>,           
#> #   filesize <int>, sha256 <chr>, sysreqs <chr>, built <chr>,           
#> #   published <dttm>, deps <list>, md5sum <chr>, path <chr>, and …      

Update metadata cache

By default pkg_install() and similar functions automatically update the metadata for the currently set repositories if it is older than 24 hours. You can also force an update manually:

pak::meta_update()
#>  Updating metadata database ... done                                   

Clean metadata cache

pak::meta_clean(force = TRUE)
pak::meta_summary()
#> [1] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/_metad
#> ata"                                                                    
#>                                                                         
#> $current_db                                                             
#> [1] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/_metad
#> ata/pkgs-d1c324e625.rds"                                                
#>                                                                         
#> $raw_files                                                              
#> character(0)                                                            
#>                                                                         
#> $db_files                                                               
#> character(0)                                                            
#>                                                                         
#> $size                                                                   
#> [1] 0                                                                   
#>                                                                         

Inspect package cache

Downloaded packages are also cached.

pak::cache_list()
#> # A data frame: 480 × 11                                                
#>    fullpath       path  package url   etag  sha256 version platf…¹ built
#>    <chr>          <chr> <chr>   <chr> <chr> <chr>  <chr>   <chr>   <int>
#>  1 /Users/gaborc… arch… NA      http… "\"1… 0c8f0… NA      NA         NA
#>  2 /Users/gaborc… bin/… evalua… http… "\"1… 08a39… 0.17    aarch6…    NA
#>  3 /Users/gaborc… bin/… crayon  http… "\"2… 1e6d5… 1.5.2   aarch6…    NA
#>  4 /Users/gaborc… bin/… common… http… "\"4… 47b4a… 1.8.1   aarch6…    NA
#>  5 /Users/gaborc… bin/… curl    http… "\"b… 7b8ba… 4.3.3   aarch6…    NA
#>  6 /Users/gaborc… bin/… tinytex http… "\"2… 7e9ba… 0.42    aarch6…    NA
#>  7 /Users/gaborc… bin/… jsonli… http… "\"1… 68e59… 1.8.2   aarch6…    NA
#>  8 /Users/gaborc… bin/… lifecy… http… "\"1… 7ce27… 1.0.3   aarch6…    NA
#>  9 /Users/gaborc… bin/… vctrs   http… "\"1… c3a69… 0.4.2   aarch6…    NA
#> 10 /Users/gaborc… src/… pkgcac… NA     NA   9b70a… NA      NA          0
#> # … with 470 more rows, 2 more variables: vignettes <int>,              
#> #   rversion <chr>, and abbreviated variable name ¹​platform            

View a package cache summary

pak::cache_summary()
#> $cachepath                                                              
#> [1] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/pkg"  
#>                                                                         
#> $files                                                                  
#> [1] 480                                                                 
#>                                                                         
#> $size                                                                   
#> [1] 653325143                                                           
#>                                                                         

Clean package cache

pak::cache_clean()

Libraries

List packages in a library

pak::lib_status(Sys.getenv("R_LIBS_USER"))
#> # A data frame: 701 × 39                                                
#>    library   package title version depends repos…¹ license needs…² built
#>    <chr>     <chr>   <chr> <chr>   <chr>   <chr>   <chr>   <lgl>   <chr>
#>  1 /Users/g… abc     "Too… 2.2.1   R (>= … CRAN    GPL (>… FALSE   R 4.…
#>  2 /Users/g… abc.da… "Dat… 1.0     R (>= … CRAN    GPL (>… FALSE   R 4.…
#>  3 /Users/g… abind   "Com… 1.4-5   R (>= … CRAN    LGPL (… FALSE   R 4.…
#>  4 /Users/g… ade4    "Ana… 1.7-19  R (>= … CRAN    GPL (>… TRUE    R 4.…
#>  5 /Users/g… ape     "Ana… 5.6-2   R (>= … CRAN    GPL-2 … TRUE    R 4.…
#>  6 /Users/g… aplot   "Dec… 0.1.7   NA      CRAN    Artist… FALSE   R 4.…
#>  7 /Users/g… archive "Mul… 1.1.5   R (>= … CRAN    MIT + … TRUE    R 4.…
#>  8 /Users/g… arrayh… "Con… 1.1-0   NA      CRAN    GPL     FALSE   R 4.…
#>  9 /Users/g… arrow   "Int… 9.0.0   R (>= … CRAN    Apache… TRUE    R 4.…
#> 10 /Users/g… arules  "Min… 1.7-5   R (>= … CRAN    GPL-3   TRUE    R 4.…
#> # … with 691 more rows, 30 more variables: remotetype <chr>,            
#> #   remotepkgref <chr>, remoteref <chr>, remoterepos <chr>,             
#> #   remotepkgplatform <chr>, remotesha <chr>, imports <chr>,            
#> #   suggests <chr>, linkingto <chr>, remotes <chr>, remotehost <chr>,   
#> #   remoterepo <chr>, remoteusername <chr>, enhances <chr>,             
#> #   biocviews <chr>, remoteurl <chr>, remotesubdir <chr>,               
#> #   priority <chr>, remoteetag <chr>, remotepackaged <chr>, …           

Pass the directory of the library as the argument.


A list of the most important pak features

Description

A list of the most important pak features.

pak is fast

Parallel HTTP

pak performs HTTP queries concurrently. This is true when

  • it downloads package metadata from package repositories,

  • it resolves packages from CRAN, GitHub, URLs, etc,

  • it downloads the actual package files,

  • etc.

Parallel installation

pak installs packages concurrently, as much as their dependency graph allows this.

Caching

pak caches metadata and package files, so you don't need to re-download the same files over and over.

pak is safe

Plan installation up front

pak creates an installation plan before downloading any packages. If the plan is unsuccessful, then it fails without downloading any packages.

Auto-install missing dependencies

When requesting the installation of a package, pak makes sure that all of its dependencies are also installed.

Keeping binary packages up-to-date

pak automatically discards binary packages from the cache, if a new build of the same version is available on CRAN.

Correct CRAN metadata errors

pak can correct some of CRAN's metadata issues, e.g.:

  • New version of the package was released since we obtained the metadata.

  • macOS binary package is only available at https://mac.r-project.org/ because of a synchronization issue.

Graceful handling of locked package DLLs on Windows

pak handles the situation of locked package DLLs, as well as possible. It detects which process locked them, and offers the choice of terminating these processes. It also unloads packages from the current R session as needed.

pak keeps its own dependencies isolated

pak keeps its own dependencies in a private package library and never loads any packages. (Only in background processes).

pak is convenient

pak comes as a self-contained binary package

On the most common platforms. No dependencies, no system dependencies, no compiler needed. (See also the installation manual.)

Install packages from multiple sources

  • CRAN, Bioconductor

  • GitHub

  • URLs

  • Local files or directories.

Ignore certain optional dependencies

pak can ignore certain optional dependencies if requested.

CRAN package file sizes

pak knows the sizes of CRAN package files, so it can estimate how much data you need to download, before the installation.

Bioconductor version detection

pak automatically selects the Bioconductor version that is appropriate for your R version. No need to set any repositories.

Time travel with PPM

pak can use PPM (Posit Public Package Manager) to install from snapshots or CRAN.

pak can install dependencies of local packages

Very handy for package development!


Install missing packages on the fly

Description

Use this function to set up a global error handler, that is called if R fails to load a package. This handler will offer you the choice of installing the missing package (and all its dependencies), and in some cases it can also remedy the error and restart the code.

Usage

handle_package_not_found(err)

Arguments

err

The error object, of class packageNotFoundError.

Details

You are not supposed to call this function directly. Instead, set it up as a global error handler, possibly in your .Rprofile file:

if (interactive() && getRversion() >= "4.0.0") {
  globalCallingHandlers(
    packageNotFoundError = function(err) {
      try(pak::handle_package_not_found(err))
    }
  )
}

Global error handlers are only supported in R 4.0.0 and later.

Currently handle_package_not_found() does not do anything in non-interactive mode (including in knitr, testthat and RStudio notebooks), this might change in the future.

In some cases it is possible to remedy the original computation that tried to load the missing package, and pak will offer you to do so after a successful installation. Currently, in R 4.0.4, it is not possible to continue a failed library() call.

Value

Nothing.


All about installing pak.

Description

Read this if the default installation methods do not work for you or if you want the release candidate or development version.

Pre-built binaries

Our pre-built binaries have the advantage that they are completely self-containted and dependency free. No additional R packages, system libraries or tools (e.g. compilers) are needed for them. Install a pre-built binary build of pak from our repository on GitHub:

install.packages("pak", repos = sprintf(
  "https://r-lib.github.io/p/pak/stable/%s/%s/%s",
  .Platform$pkgType,
  R.Version()$os,
  R.Version()$arch
))

This is supported for the following systems:

OS CPU R version
Linux x86_64 R 3.4.0 - R-devel
Linux aarch64 R 3.4.0 - R-devel
macOS High Sierra+ x86_64 R 3.4.0 - R-devel
macOS Big Sur+ aarch64 R 4.1.0 - R-devel
Windows x86_64 R 3.4.0 - R-devel
FreeBSD 13.x or later x86_64 R 4.4.x
OpenBSD 7.4, 7.5, 7.6 x86_64 R 4.2.x (7.4, 7.5), R 4.4.x (7.6)
NetBSD 10.0 x86_64 R 4.4.x
DragonFly BSD 6.4 x86_64 R 4.3.x
Notes
  • For macOS we only support the official CRAN R build. Other builds, e.g. Homebrew R, are not supported.

  • We only support R builds that have an R shared library. CRAN's Windows and macOS installers are such, so the the R builds in the common Linux distributions. But this might be an issue if you build R yourself without the --enable-R-shlib option.

Install from CRAN

Install the released version of the package from CRAN as usual:

install.packages("pak")

This potentially needs a C compiler on platforms CRAN does not have binaries packages for.

Nightly builds

We have nightly binary builds, for the same systems as the table above:

install.packages("pak", repos = sprintf(
  "https://r-lib.github.io/p/pak/devel/%s/%s/%s",
  .Platform$pkgType,
  R.Version()$os,
  R.Version()$arch
))
stable, rc and devel streams

We have three types of binaries available:

  • stable corresponds to the latest CRAN release of CRAN.

  • rc is a release candidate build, and it is available about 1-2 weeks before a release. Otherwise it is the same as the stable build.

  • devel has builds from the development tree. Before release it might be the same as the rc build.

The streams are available under different repository URLs:

stream <- "rc"
install.packages("pak", repos = sprintf(
  "https://r-lib.github.io/p/pak/%s/%s/%s/%s",
  stream,
  .Platform$pkgType,
  R.Version()$os,
  R.Version()$arch
))

Status of packages in a library

Description

Status of packages in a library

Usage

lib_status(lib = .libPaths()[1])

pkg_list(lib = .libPaths()[1])

Arguments

lib

Path to library.

Value

Data frame the contains data about the packages installed in the library. It has always has columns:

  • biocviews: the corresponding field from DESCRIPTION, it must be present for all Bioconductor packages, other packages typically don't have it.

  • built: the Built field from DESCRIPTION.

  • depends, suggests, Imports, linkingto, enhances: the corresponding fields from the DESCRIPTION files.

  • deps: A list or data frames, the dependencies of the package. It has columns: ref, type (dependency type in lowercase), package (dependent package, or R), op and version, for last two are for version requirement. op can be >=, >, == or <=, although the only the first one is common in practice.

  • library: path to the package library containing the package.

  • license: from DESCRIPTION.

  • md5sum: from DESCTIPTION, typically NA, except on Windows.

  • needscompilation: from DESCRIPTION, this column is logical.

  • package: package name.

  • platform: from the Built field in DESCRIPTION, the current platform if missing from DESCRIPTION.

  • priority: from DESCRIPTION, usually base, recommended, or missing.

  • ref: the corresponding ⁠installed::*⁠ package reference.

  • repository: from DESCRIPTION. For packages from a CRAN repository this is CRAN, some other repositories, e.g. R-universe adds the repository URL here.

  • repotype: cran, bioc or missing.

  • rversion: from the Built field. If no such field, then the current R version.

  • sysreqs: the SystemRequirements field from DESCRIPTION.

  • title: package title.

  • type: always installed.

  • version: package version (as string).

Most of these columns are unchanged from DESCRIPTION, but pak also adds a couple.

Notes:

  • In addition, it also has all ⁠remote*⁠ and ⁠config/needs/*⁠ entries from the DESCRIPTION files. (Case insensitive.)

  • All columns are of type character, except for needscompilation, which is logical and deps, which is a list columns.

  • If an entry is missing for a package, it is set to NA.

  • Note that column names are lowercase, even if the corresponding entries are not in DESCRIPTION.

  • The order of the columns is not deterministic, so don't assume any order.

  • Additional columns might be present, these are internal for pak and should not be used in user code.

Examples

lib_status(.Library)
#> # A data frame: 31 × 31                                                 
#>    library   package version prior…¹ title license sugge…² built depends
#>    <chr>     <chr>   <chr>   <chr>   <chr> <chr>   <chr>   <chr> <chr>  
#>  1 /Library… base    4.2.2   base    "The… Part o… methods R 4.… NA     
#>  2 /Library… boot    1.3-28  recomm… "Boo… Unlimi… MASS, … R 4.… R (>= …
#>  3 /Library… class   7.3-20  recomm… "Fun… GPL-2 … NA      R 4.… R (>= …
#>  4 /Library… cluster 2.1.4   recomm… "\"F… GPL (>… MASS, … R 4.… R (>= …
#>  5 /Library… codeto… 0.2-18  recomm… "Cod… GPL     NA      R 4.… R (>= …
#>  6 /Library… compil… 4.2.2   base    "The… Part o… NA      R 4.… NA     
#>  7 /Library… datase… 4.2.2   base    "The… Part o… NA      R 4.… NA     
#>  8 /Library… filelo… 1.0.2   NA      "Por… MIT + … callr … R 4.… NA     
#>  9 /Library… foreign 0.8-83  recomm… "Rea… GPL (>… NA      R 4.… R (>= …
#> 10 /Library… graphi… 4.2.2   base    "The… Part o… NA      R 4.… NA     
#> # … with 21 more rows, 22 more variables: needscompilation <lgl>,       
#> #   repository <chr>, imports <chr>, remotetype <chr>,                  
#> #   remotepkgref <chr>, remoteref <chr>, remoterepos <chr>,             
#> #   remotepkgplatform <chr>, remotesha <chr>, enhances <chr>,           
#> #   linkingto <chr>, md5sum <chr>, platform <chr>, biocviews <chr>,     
#> #   sysreqs <chr>, ref <chr>, type <chr>, status <chr>, rversion <chr>, 
#> #   sources <list>, repotype <chr>, deps <list>, and abbreviated …      

See Also

Other package functions: pak(), pkg_deps_tree(), pkg_deps(), pkg_download(), pkg_install(), pkg_remove(), pkg_status(), pkg_sysreqs()


Dependencies of a package tree

Description

Dependencies of a package tree

Usage

local_deps(root = ".", upgrade = TRUE, dependencies = NA)

local_deps_tree(root = ".", upgrade = TRUE, dependencies = NA)

local_dev_deps(root = ".", upgrade = TRUE, dependencies = TRUE)

local_dev_deps_tree(root = ".", upgrade = TRUE, dependencies = TRUE)

Arguments

root

Path to the package tree.

upgrade

Whether to use the most recent available package versions.

dependencies

What kinds of dependencies to install. Most commonly one of the following values:

  • NA: only required (hard) dependencies,

  • TRUE: required dependencies plus optional and development dependencies,

  • FALSE: do not install any dependencies. (You might end up with a non-working package, and/or the installation might fail.) See Package dependency types for other possible values and more information about package dependencies.

Value

All of these functions return the dependencies in a data frame. local_deps_tree() and local_dev_deps_tree() also print the dependency tree.

See Also

Other local package trees: local_deps_explain(), local_install_deps(), local_install_dev_deps(), local_install(), local_package_trees, pak()


Explain dependencies of a package tree

Description

These functions are similar to pkg_deps_explain(), but work on a local package tree. local_dev_deps_explain() also includes development dependencies.

Usage

local_deps_explain(deps, root = ".", upgrade = TRUE, dependencies = NA)

local_dev_deps_explain(deps, root = ".", upgrade = TRUE, dependencies = TRUE)

Arguments

deps

Package names of the dependencies to explain.

root

Path to the package tree.

upgrade

Whether to use the most recent available package versions.

dependencies

What kinds of dependencies to install. Most commonly one of the following values:

  • NA: only required (hard) dependencies,

  • TRUE: required dependencies plus optional and development dependencies,

  • FALSE: do not install any dependencies. (You might end up with a non-working package, and/or the installation might fail.) See Package dependency types for other possible values and more information about package dependencies.

See Also

Other local package trees: local_deps(), local_install_deps(), local_install_dev_deps(), local_install(), local_package_trees, pak()


Install a package tree

Description

Installs a package tree (or source package file), together with its dependencies.

Usage

local_install(
  root = ".",
  lib = .libPaths()[1],
  upgrade = TRUE,
  ask = interactive(),
  dependencies = NA
)

Arguments

root

Path to the package tree.

lib

Package library to install the packages to. Note that all dependent packages will be installed here, even if they are already installed in another library. The only exceptions are base and recommended packages installed in .Library. These are not duplicated in lib, unless a newer version of a recommemded package is needed.

upgrade

When FALSE, the default, pak does the minimum amount of work to give you the latest version(s) of pkg. It will only upgrade dependent packages if pkg, or one of their dependencies explicitly require a higher version than what you currently have. It will also prefer a binary package over to source package, even it the binary package is older.

When upgrade = TRUE, pak will ensure that you have the latest version(s) of pkg and all their dependencies.

ask

Whether to ask for confirmation when installing a different version of a package that is already installed. Installations that only add new packages never require confirmation.

dependencies

What kinds of dependencies to install. Most commonly one of the following values:

  • NA: only required (hard) dependencies,

  • TRUE: required dependencies plus optional and development dependencies,

  • FALSE: do not install any dependencies. (You might end up with a non-working package, and/or the installation might fail.) See Package dependency types for other possible values and more information about package dependencies.

Details

local_install() is equivalent to pkg_install("local::.").

Value

Data frame, with information about the installed package(s).

See Also

Other local package trees: local_deps_explain(), local_deps(), local_install_deps(), local_install_dev_deps(), local_package_trees, pak()


Install the dependencies of a package tree

Description

Installs the hard dependencies of a package tree (or source package file), without installing the package tree itself.

Usage

local_install_deps(
  root = ".",
  lib = .libPaths()[1],
  upgrade = TRUE,
  ask = interactive(),
  dependencies = NA
)

Arguments

root

Path to the package tree.

lib

Package library to install the packages to. Note that all dependent packages will be installed here, even if they are already installed in another library. The only exceptions are base and recommended packages installed in .Library. These are not duplicated in lib, unless a newer version of a recommemded package is needed.

upgrade

When FALSE, the default, pak does the minimum amount of work to give you the latest version(s) of pkg. It will only upgrade dependent packages if pkg, or one of their dependencies explicitly require a higher version than what you currently have. It will also prefer a binary package over to source package, even it the binary package is older.

When upgrade = TRUE, pak will ensure that you have the latest version(s) of pkg and all their dependencies.

ask

Whether to ask for confirmation when installing a different version of a package that is already installed. Installations that only add new packages never require confirmation.

dependencies

What kinds of dependencies to install. Most commonly one of the following values:

  • NA: only required (hard) dependencies,

  • TRUE: required dependencies plus optional and development dependencies,

  • FALSE: do not install any dependencies. (You might end up with a non-working package, and/or the installation might fail.) See Package dependency types for other possible values and more information about package dependencies.

Details

Note that development (and optional) dependencies, under Suggests in DESCRIPTION, are not installed. If you want to install them as well, use local_install_dev_deps().

Value

Data frame, with information about the installed package(s).

See Also

Other local package trees: local_deps_explain(), local_deps(), local_install_dev_deps(), local_install(), local_package_trees, pak()


Install all (development) dependencies of a package tree

Description

Installs all dependencies of a package tree (or source package file), without installing the package tree itself. It installs the development dependencies as well, specified in the Suggests field of DESCRIPTION.

Usage

local_install_dev_deps(
  root = ".",
  lib = .libPaths()[1],
  upgrade = TRUE,
  ask = interactive(),
  dependencies = TRUE
)

Arguments

root

Path to the package tree.

lib

Package library to install the packages to. Note that all dependent packages will be installed here, even if they are already installed in another library. The only exceptions are base and recommended packages installed in .Library. These are not duplicated in lib, unless a newer version of a recommemded package is needed.

upgrade

When FALSE, the default, pak does the minimum amount of work to give you the latest version(s) of pkg. It will only upgrade dependent packages if pkg, or one of their dependencies explicitly require a higher version than what you currently have. It will also prefer a binary package over to source package, even it the binary package is older.

When upgrade = TRUE, pak will ensure that you have the latest version(s) of pkg and all their dependencies.

ask

Whether to ask for confirmation when installing a different version of a package that is already installed. Installations that only add new packages never require confirmation.

dependencies

What kinds of dependencies to install. Most commonly one of the following values:

  • NA: only required (hard) dependencies,

  • TRUE: required dependencies plus optional and development dependencies,

  • FALSE: do not install any dependencies. (You might end up with a non-working package, and/or the installation might fail.) See Package dependency types for other possible values and more information about package dependencies.

See Also

Other local package trees: local_deps_explain(), local_deps(), local_install_deps(), local_install(), local_package_trees, pak()


About local package trees

Description

pak can install packages from local package trees. This is convenient for package development. See the following functions:

Details

Note that the last two functions do not install the package in the specified package tree itself, only its dependencies. This is convenient if the package itself is loaded via some other means, e.g. devtools::load_all(), for development.

See Also

Other local package trees: local_deps_explain(), local_deps(), local_install_deps(), local_install_dev_deps(), local_install(), pak()


Query system requirements

Description

[Deprecated]

Note that these functions are now deprecated, in favor of pkg_sysreqs() and the ⁠sysreqs_*⁠ functions, which are more powerful, as they work for all package sources (packages at Github, GitLab, URLs, etc.) and they have more detailed output.

Instead of

pak::pkg_system_requirement("curl")

call

pak::pkg_sysreqs("curl")$install_scripts

and the equivalent of

pak::local_system_requirements()

is

pak::pkg_sysreqs("local::.", dependencies = TRUE)$install_script

Usage

local_system_requirements(
  os = NULL,
  os_release = NULL,
  root = ".",
  execute = FALSE,
  sudo = execute,
  echo = FALSE
)

pkg_system_requirements(
  package,
  os = NULL,
  os_release = NULL,
  execute = FALSE,
  sudo = execute,
  echo = FALSE
)

Arguments

os, os_release

The operating system and operating system release version, e.g. "ubuntu", "debian", "centos", "redhat". See https://github.com/rstudio/r-system-requirements#operating-systems for all full list of supported operating systems.

If NULL, the default, these will be looked up.

root

Path to the package tree.

execute, sudo

If execute is TRUE, pak will execute the system commands (if any). If sudo is TRUE, pak will prepend the commands with sudo.

echo

If echo is TRUE and execute is TRUE, echo the command output.

package

Package names to lookup system requirements for.

Details

Returns a character vector of commands to run that will install system requirements for the queried operating system.

local_system_requirements() queries system requirements for a dev package (and its dependencies) given its root path.

pkg_system_requirements() queries system requirements for existing packages (and their dependencies).

Value

A character vector of commands needed to install the system requirements for the package.

Examples

local_system_requirements("ubuntu", "20.04")


pkg_system_requirements("pak", "ubuntu", "20.04")
pkg_system_requirements("pak", "redhat", "7")
pkg_system_requirements("config", "ubuntu", "20.04") # no sys reqs
pkg_system_requirements("curl", "ubuntu", "20.04")
pkg_system_requirements("git2r", "ubuntu", "20.04")
pkg_system_requirements(c("config", "git2r", "curl"), "ubuntu", "20.04")
# queried packages must exist
pkg_system_requirements("iDontExist", "ubuntu", "20.04")
pkg_system_requirements(c("curl", "iDontExist"), "ubuntu", "20.04")

Create a lock file

Description

The lock file can be used later, possibly in a new R session, to carry out the installation of the dependencies, with lockfile_install().

Usage

lockfile_create(
  pkg = "deps::.",
  lockfile = "pkg.lock",
  lib = NULL,
  upgrade = FALSE,
  dependencies = NA
)

Arguments

pkg

Package names or package references. E.g.

  • ggplot2: package from CRAN, Bioconductor or a CRAN-like repository in general,

  • tidyverse/ggplot2: package from GitHub,

  • tidyverse/[email protected]: package from GitHub tag or branch,

  • ⁠https://examples.com/.../ggplot2_3.3.6.tar.gz⁠: package from URL,

  • .: package in the current working directory.

See "Package sources" for more details.

lockfile

Path to the lock file.

lib

Package library to install the packages to. Note that all dependent packages will be installed here, even if they are already installed in another library. The only exceptions are base and recommended packages installed in .Library. These are not duplicated in lib, unless a newer version of a recommemded package is needed.

upgrade

When FALSE, the default, pak does the minimum amount of work to give you the latest version(s) of pkg. It will only upgrade dependent packages if pkg, or one of their dependencies explicitly require a higher version than what you currently have. It will also prefer a binary package over to source package, even it the binary package is older.

When upgrade = TRUE, pak will ensure that you have the latest version(s) of pkg and all their dependencies.

dependencies

What kinds of dependencies to install. Most commonly one of the following values:

  • NA: only required (hard) dependencies,

  • TRUE: required dependencies plus optional and development dependencies,

  • FALSE: do not install any dependencies. (You might end up with a non-working package, and/or the installation might fail.) See Package dependency types for other possible values and more information about package dependencies.

Details

Note, since the URLs of CRAN and most CRAN-like repositories change over time, in practice you cannot use the lock file much later. For example, binary packages of older package version might be deleted from the repository, breaking the URLs in the lock file.

Currently the intended use case of lock files in on CI systems, to facilitate caching. The (hash of the) lock file provides a good key for caching systems.

See Also

Other lock files: lockfile_install()


Install packages based on a lock file

Description

Install a lock file that was created with lockfile_create().

Usage

lockfile_install(lockfile = "pkg.lock", lib = .libPaths()[1], update = TRUE)

Arguments

lockfile

Path to the lock file.

lib

Library to carry out the installation on.

update

Whether to online install the packages that either not installed in lib, or a different version is installed for them.

See Also

Other lock files: lockfile_create()


Metadata cache utilities

Description

Various utilities to inspect, update and clean the metadata cache. See the pkgcache package if you need for control over the metadata cache.

Usage

meta_summary()

meta_list(pkg = NULL)

meta_update()

meta_clean(force = FALSE)

Arguments

pkg

Package names, if specified then only entries for pkg are returned.

force

If FALSE, then pak will ask for confirmation.

Details

meta_summary() returns a summary of the metadata cache.

meta_list() lists all (or some) packages in the metadata database.

meta_update() updates the metadata database. You don't normally need to call this function manually, because all pak functions (e.g. pkg_install(), pkg_download(), etc.) call it automatically, to make sure that they use the latest available metadata.

meta_clean() deletes the whole metadata DB.

Value

meta_summary() returns a list with entries:

  • cachepath: absolute path of the metadata cache.

  • current_db: the file that contains the current metadata database. It is currently an RDS file, but this might change in the future.

  • raw_files: the files that are the downloaded ⁠PACKAGES*⁠ files.

  • db_files: all metadata database files.

  • size: total size of the metadata cache.

meta_list() returns a data frame of all available packages in the configured repositories.

meta_update() returns nothing.

meta_clean() returns nothing

Examples

Metadata cache summary:

meta_summary()
#> $cachepath
#> [1] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/_metadata"
#> 
#> $current_db
#> [1] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/_metadata/pkgs-34444e3072.rds"
#> 
#> $raw_files
#>  [1] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/_metadata/BioCann-59693086a0/bin/macosx/big-sur-arm64/contrib/4.2/PACKAGES.gz"      
#>  [2] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/_metadata/BioCann-59693086a0/src/contrib/PACKAGES.gz"                               
#>  [3] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/_metadata/BioCexp-90d4a3978b/bin/macosx/big-sur-arm64/contrib/4.2/PACKAGES.gz"      
#>  [4] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/_metadata/BioCexp-90d4a3978b/src/contrib/PACKAGES.gz"                               
#>  [5] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/_metadata/BioCsoft-2a43920999/bin/macosx/big-sur-arm64/contrib/4.2/PACKAGES.gz"     
#>  [6] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/_metadata/BioCsoft-2a43920999/src/contrib/PACKAGES.gz"                              
#>  [7] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/_metadata/BioCworkflows-26330ba3ca/bin/macosx/big-sur-arm64/contrib/4.2/PACKAGES.gz"
#>  [8] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/_metadata/BioCworkflows-26330ba3ca/src/contrib/PACKAGES.gz"                         
#>  [9] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/_metadata/CRAN-075c426938/bin/macosx/big-sur-arm64/contrib/4.2/PACKAGES.gz"         
#> [10] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/_metadata/CRAN-075c426938/src/contrib/PACKAGES.gz"                                  
#> 
#> $db_files
#> [1] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/_metadata/pkgs-34444e3072.rds"
#> [2] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/_metadata/pkgs-ccacf1b389.rds"
#> 
#> $size
#> [1] 174848200

The current metadata DB:

meta_list()
#>  Loading metadata database ... done                                    
#> # A data frame: 45,279 × 32                                             
#>    package version depends sugge…¹ license imports linki…² archs enhan…³
#>    <chr>   <chr>   <chr>   <chr>   <chr>   <chr>   <chr>   <chr> <chr>  
#>  1 A3      1.0.0   R (>= … random… GPL (>… NA      NA      NA    NA     
#>  2 AATtoo… 0.0.2   R (>= … NA      GPL-3   magrit… NA      NA    NA     
#>  3 ABACUS  1.0.0   R (>= … rmarkd… GPL-3   ggplot… NA      NA    NA     
#>  4 ABC.RAP 0.9.0   R (>= … knitr,… GPL-3   graphi… NA      NA    NA     
#>  5 ABCana… 1.2.1   R (>= … NA      GPL-3   plotrix NA      NA    NA     
#>  6 ABCopt… 0.15.0  NA      testth… MIT + … Rcpp, … Rcpp    ABCo… NA     
#>  7 ABCp2   1.2     MASS    NA      GPL-2   NA      NA      NA    NA     
#>  8 ABHgen… 1.0.1   NA      knitr,… GPL-3   ggplot… NA      NA    NA     
#>  9 ABPS    0.3     NA      testth… GPL (>… kernlab NA      NA    NA     
#> 10 ACA     1.1     R (>= … NA      GPL     graphi… NA      NA    NA     
#> # … with 45,269 more rows, 23 more variables:                           
#> #   license_restricts_use <chr>, os_type <chr>, priority <chr>,         
#> #   license_is_foss <chr>, repodir <chr>, rversion <chr>,               
#> #   platform <chr>, needscompilation <chr>, ref <chr>, type <chr>,      
#> #   direct <lgl>, status <chr>, target <chr>, mirror <chr>,             
#> #   sources <list>, filesize <int>, sha256 <chr>, sysreqs <chr>,        
#> #   built <chr>, published <dttm>, deps <list>, md5sum <chr>, …         

Selected packages only:

meta_list(pkg = c("shiny", "htmlwidgets"))
#>   package  version depends sugge…¹ license imports linki…² archs enhan…³
#> * <chr>    <chr>   <chr>   <chr>   <chr>   <chr>   <chr>   <chr> <chr>  
#> 1 htmlwid… 1.5.4   NA      "knitr… MIT + … "grDev… NA      NA    shiny …
#> 2 shiny    1.7.3   R (>= … "datas… GPL-3 … "utils… NA      NA    NA     
#> 3 htmlwid… 1.6.0   NA      "testt… MIT + … "grDev… NA      NA    shiny …
#> 4 shiny    1.7.4   R (>= … "datas… GPL-3 … "utils… NA      NA    NA     
#> # … with 23 more variables: license_restricts_use <chr>, os_type <chr>, 
#> #   priority <chr>, license_is_foss <chr>, repodir <chr>,               
#> #   rversion <chr>, platform <chr>, needscompilation <chr>, ref <chr>,  
#> #   type <chr>, direct <lgl>, status <chr>, target <chr>, mirror <chr>, 
#> #   sources <list>, filesize <int>, sha256 <chr>, sysreqs <chr>,        
#> #   built <chr>, published <dttm>, deps <list>, md5sum <chr>,           
#> #   path <chr>, and abbreviated variable names ¹​suggests, ²​linkingto, 
#>                                                                        

Update the metadata DB

meta_update()
#>  Updated metadata database: 1.23 MB in 1 file.                         
#>  Updating metadata database ... done                                   

Delete the metadata DB

meta_clean()
#>  Cleaning up cache directory /Users/gaborcsardi/Library/Caches/org.R-pr
#> oject.R/R/pkgcache/_metadata.                                           

Various types of R package dependencies

Description

Various types of R package dependencies

Details

R packages may have various types of dependencies, see Writing R Extensions. pak groups dependencies into three groups:

  • hard dependencies: "Depends", "Imports", and "LinkingTo",

  • soft dependencies: "Suggests" and "Enhances",

  • extra dependencies, see below.

pak supports concise ways of specifying which types of dependencies of a package should be installed. It is similar to how utils::install.packages() interprets its dependencies argument. You typically use one of these values:

  • NA or "hard" to install a package and its required dependencies,

  • TRUE to install all required dependencies, plus optional and development dependencies.

If you need more flexibility, the full description of possible values for the dependencies argument are:

  • TRUE: This means all hard dependencies plus Suggests for direct installations, and hard dependencies only for dependent packages.

  • FALSE: no dependencies are installed at all.

  • NA (any atomic type, so NA_character_, etc. as well): only hard dependencies are installed.

  • If a list with two entries named direct and indirect, it is taken as the requested dependency types, for direct installations and dependent packages.

  • If a character vector, then it is taken as the dependency types for direct installations, and the hard dependencies are used for the dependent packages.

If "hard" is included in the value or a list element, then it is replaced by the hard dependency types. If "soft" or "all" is included, then it is replaced by all hard and soft dependency.

Extra dependencies

pak supports extra dependency types for direct installations not from CRAN-like repositories. These are specified with a ⁠Config/Needs/⁠ prefix in the DESCRIPTION and they can contain package references, separated by commas. For example you can specify packages that are only needed for the pkgdown website of the package:

 

Config/Needs/website: r-lib/pkgdown

To use these dependency types, you need to specify them in the dependencies argument to pak functions. Note that ⁠Config/Needs/*⁠ fields are currently not used from CRAN packages, and packages in CRAN-like repositories in general. Usually you specify that a ⁠Config/Needs/*⁠ dependency type should be installed together with "hard" or "all", to install all hard or soft dependencies as well.


Install packages from CRAN, Bioconductor, GitHub, URLs, etc.

Description

Install packages from CRAN, Bioconductor, GitHub, URLs, etc. Learn how to tell pak which packages to install, and where those packages can be found.

If you want a quick overview of package sources, see "Get started with pak".

Details

Package references

Many pkgdepends and pak functions take package names as arguments. E.g. pak::pkg_install() takes the names of the packages to install and pak::pkg_deps_tree() takes the names of the packages to draw dependency trees for. Most of these functions can also take more generic package references instead of package names. A package reference also tells pak where to find the package source. To specify a package source, use its name as a prefix, with a :: separator. E.g. cran::mypkg means the mypkg package from CRAN. A package name is a special package reference that implicitly specifies the configured CRAN(-like) repositories as the package source (we call this the standard package source). So mypkg is equivalent to standard::mypkg and pak looks for mypkg in any of the configured CRAN-like repositories. If you did not explicitly specify any CRAN-like repositories (e.g. with options("repos")), then pak uses the CRAN and Bioconductor repositories by default. This is the list of the currently supported package sources. We will discuss each in detail below.

  • cran: a CRAN package.

  • bioc: a Bioconductor package.

  • standard: a package from a configured CRAN-like repository.

  • github: a package from GitHub.

  • gitlab: a package from GitLab.

  • git: a package in a Git repository.

  • local: a local package file or directory.

  • url: an URL that points to a package archive.

  • installed: an installed package.

  • deps: the dependencies of a local package file or directory.

  • any: a special reference type that accepts a package from any source. See below.

  • param: a special reference to change how other references are downloaded or installed. See "Parameters" below.

Shorthands

To save typing, you do not always need to fully specify the package source in a package reference. You have seen before that a package name implicitly has a standard package source. Here are the complete rules for such shorthands, in the order they are applied: If the package reference is

  • a valid package name, or a package name with an @ version specification, the standard package source is used. E.g. pkg is equivalent to standard::pkg and [email protected] is equivalent to ⁠standard::[email protected].

  • a valid github ref type without the ⁠github::⁠ prefix, then github is used. E.g. user/repo is equivalent to github::user/repo and user/repo@tag is equivalent to github::user/repo@tag, etc.

  • a GitHub URL (see below) without the ⁠github::⁠ prefix, then github is used.

  • a path that starts with . or / or ⁠\⁠ or ~, then local is used. (pak does not check if the path exists.)

  • of the form ⁠<package-name>=?<parameters>⁠, then it will be the special param type. See "Parameters" below.

If the package reference does not have an explicit package source, and the package source cannot be determined from these rules, then pak throws an error.

Package names

When pak is looking up the dependencies of a package, it needs to be able to determine the name of the dependency from the package reference. This is sometimes not easy for dependencies in Remotes (or similar) fields.

  • For ⁠github::⁠ and ⁠gitlab::⁠ dependencies pak assumes that the package name is the same as the name of the repository. If this does not hold, then you need to specify the package name explicitly, using a ⁠<package>=⁠ prefix. E.g. pins=rstudio/pins-r. To specify both the package source type and the package name at the same time, write it like this: pins=github::rstudio/pins-r.

  • For ⁠git::⁠ dependencies, pak assumes that the package name is the same as the last component of the repository. If this does not hold, then you need to specify the package name explicitly, using a ⁠<package>=⁠ prefix. E.g. ⁠pins=git::https://github.com/rstudio/pins-r⁠.

  • For ⁠local::⁠ dependencies, you always need to specify the package name explicitly. E.g. ⁠pins=local::~/works/pins⁠.

  • For ⁠url::⁠ dependencies, you always need to specify the package name explicitly. E.g. ⁠ggplot2=url::https://cloud.r-project.org/src/contrib/...⁠.

Parameters

Package references may have optional parameters, added after a question mark. Different parameters are separated by an ampersand (&) character. (This is very similar to how HTTP URLs take query parameters.) Parameters may be flags that turn on some behavior, or they can have a string value, assigned with an equal sign (=). If no value is assigned, then a true value is assumed. For example, these two package references are equivalent:

 

cran::testthat?source&nocache
cran::testthat?source=true&nocache=true
Parameters for downstream packages

pak allows specifying parameters for downstream packages, using the ⁠<package>=?<params>⁠ special package reference, where package is the name of the package, and ⁠<params>⁠ are the parameters, as above. This is useful if you want to add a parameter to a downstream dependency. For example, to install ggplot2, and always reinstall its cli package dependency, you could use the ggplot2 and cli=?reinstall package references. The latter tells pak to always reinstall cli, even if it is already installed.

Currently supported parameters
  • ignore is a flag parameter. If specified, the package is ignored. This usually makes sense in the packagename=?ignore form, to ignore a downstream soft dependency. If all versions of a hard dependency are ignored that will lead to a solution error.

  • ignore-before-r is a version number parameter. The package will be ignored on R versions that are older than the specified one. E.g. ⁠Matrix=?ignore-before-r=4.1.2⁠ will ignore the Matrix package on R versions that are older than 4.1.2. This parameter really only makes sense in the packgename=?ignore-before-r form.

  • ignore-unavailable is a flag. It can only be specified for soft dependencies. If specified and the package is not available, it will be ignored. This parameter really only makes sense in the packagename=?ignore-unavailable form.

  • source is a flag parameter. If specified, then a source R package is requested from a CRAN-like repository. For package installations, source always triggers a re-install. In other words, source implies the reinstall parameter. This parameter is supported for ⁠bioc::⁠, ⁠cran::⁠ and ⁠standard::⁠ remote types, and it is ignored for others.

  • reinstall requests a re-install for package installations. It is supported by the ⁠bioc::⁠, ⁠cran::⁠, ⁠git::⁠, ⁠github::⁠, ⁠gitlab::⁠, ⁠local::⁠, ⁠standard::⁠, and ⁠url::⁠ remote types.

  • nocache will ignore the package cache. It will always download the package file, and it will not add the downloaded (and built) package(s) to the package cache. It is supported by the ⁠bioc::⁠, ⁠cran::⁠, ⁠git::⁠, ⁠github::⁠, ⁠gitlab::⁠, ⁠standard::⁠ and ⁠url::⁠ remote types.

Package source details
CRAN packages (⁠cran::⁠)

A package from CRAN. Full syntax:

 

[cran::]<package>[@[>=]<version> | @current | @last]
  • ⁠<package>⁠ is a valid package name.

  • ⁠<version>⁠ is a version or a version requirement.

Examples:

 

forecast
[email protected]
forecast@>=8.8
cran::forecast
forecast@last
forecast@current

Note: pak currently parses the version specification part (everything after @), but does not use it.

Bioconductor packages (⁠bioc::⁠)

A package from Bioconductor. The syntax is the same as for CRAN packages, except for the prefix.

 

[bioc::]<package>[@[>=]<version> | @current | @last]
Standard packages (⁠standard::⁠)

These are packages either from CRAN or Bioconductor, the full syntax is the same as for CRAN packages, except for the prefix:

 

[standard::]<package>[@[>=]<version> | current | last]
GitHub packages (⁠github::⁠)

Packages from a GitHub repository. Full syntax:

 

[<package>=][github::]<username>/<repository>[/<subdir>][<detail>]
  • ⁠<package>⁠ is the name of the package. If this is missing, then the name of the repository is used.

  • ⁠<username>⁠ is a GitHub username or organization name.

  • ⁠<repository>⁠ is the name of the repository.

  • ⁠<subdir>⁠ specifies an optional subdirectory, if the package is within a subdirectory in the repository.

  • ⁠<detail>⁠ specifies a certain version of the package, see below.

⁠<detail>⁠ may specify:

  • a Git branch, tag or (prefix of) a commit hash: ⁠@<commitish>⁠;

  • a pull request: ⁠#<pull-request>⁠; or

  • the latest release: ⁠@*release⁠.

If ⁠<detail>⁠ is missing, then the latest commit of the default branch is used. Examples:

 

r-lib/crayon
github::r-lib/crayon
r-lib/crayon@84be6207
r-lib/crayon@branch
r-lib/crayon#41
r-lib/crayon@release

For convenience, GitHub HTTP URLs can also be used to specify a package from GitHub. Examples:

 

https://github.com/r-lib/withr
# A branch:
https://github.com/r-lib/withr/tree/ghactions
# A tag:
https://github.com/r-lib/withr/tree/v2.1.1
# A commit:
https://github.com/r-lib/withr/commit/8fbcb548e316
# A pull request:
https://github.com/r-lib/withr/pull/76
# A release:
https://github.com/r-lib/withr/releases/tag/v2.1.0

A GitHub remote string can also be used instead of a URL, for example: [email protected]:r-lib/pak.git

GitLab packages (⁠gitlab::⁠)

Packages from a GitLab repository. Full syntax:

 

[<package>=][gitlab::]<project-path>/<repository>[/-/<subdir>][<detail>]
  • ⁠<package>⁠ is the name of the package. If this is missing, then the name of the repository is used.

  • ⁠<project-path>⁠ is typically the GitLab user or group name, but it may contain subgroups.

  • ⁠<repository>⁠ is the name of the repository, or the project in GitLab terminology. GitLab subgroups are fully supported.

  • ⁠<subdir>⁠ specifies an optional subdirectory, if the package is within a subdirectory in the repository. Note that for GitLab, this must come after a ⁠/-⁠ prefix, to be able to distinguish it from subgroups.

  • ⁠<detail>⁠ may specify a Git branch, tag or (prefix of) a commit hash.

If ⁠<detail>⁠ is missing, then the latest commit of the default branch is used. ⁠gitlab::⁠ supports Git submodules, see the git-submodules configuration entry. Examples:

 

gitlab::gaborcsardi/cli
gitlab::r-hub/filelock@main
gitlab::group/subgroup/subsubgroup/project/-/subdir@ref
Packages in Git repositories (⁠git::⁠)

Full syntax:

 

[<package>=]git::https?://<host>[<detail>]
  • ⁠<package>⁠ is the name of the package. If this is missing, then the last component of the ⁠<host>⁠ is used.

  • ⁠<host>⁠ is the host name and path of the Git repository. Some Git repositories need the .git suffix here, others are more forgiving.

  • ⁠<detail>⁠ specifies a certain version of the package: a Git branch, tag or (prefix of) a commit hash: ⁠@<commitish>⁠.

If ⁠<detail>⁠ is missing, then the latest commit of the default branch is used. ⁠git::⁠ supports Git submodules, see the git-submodules configuration entry. Examples:

 

git::https://github.com/r-lib/crayon
git::https://github.com/r-lib/crayon.git
git::https://github.com/r-lib/crayon.git@84be6207
git::https://github.com/r-lib/crayon.git@branch
git::https://gitlab.com/gaborcsardi/cli.git

Note that pak has a built-in Git client, and does not require a system Git installation. If the system has Git installed, then pak will use the credentials stored in the configured Git credential store, automatically, via the gitcreds package.

Local packages (⁠local::⁠)

A path that refers to a package file built with ⁠R CMD build⁠, or a directory that contains a package. Full syntax:

 

local::<path>

For brevity, you can omit the ⁠local::⁠ prefix, if you specify an absolute path, a path from the user's home directory, starting with ~, or a relative path starting with ⁠./⁠ or ⁠.\\⁠. A single dot (".") is considered to be a local package in the current working directory. Examples:

 

local::/foo/bar/package_1.0.0.tar.gz
local::/foo/bar/pkg
local::.
/absolute/path/package_1.0.0.tar.gz
~/path/from/home
./relative/path
.

If you specify a local package in a dependency (i.e. in DESCRIPTION), then you also need to specify the name of the package, see "Package names" above.

URLs (⁠url::⁠)

You can use ⁠url::⁠ to refer to URLs that hold R package archives (i.e. properly built with ⁠R CMD build⁠), or compressed directories of package trees (i.e. not built with ⁠R CMD build⁠). pak will figure out if it needs to run ⁠R CMD build⁠ on the package first. This remote type supports .tar.gz and .zip files. Note that URLs are not ideal remote types, because pak needs to download the package file to resolve its dependencies. When this happens, it puts the package file in the cache, so no further downloads are needed when installing the package later. Examples:

 

url::https://cloud.r-project.org/src/contrib/Archive/cli/cli_1.0.0.tar.gz
url::https://github.com/tidyverse/stringr/archive/HEAD.zip

If you specify a package from a URL in a dependency (i.e. in DESCRIPTION), then you also need to specify the name of the package, see "Package names" above.

Installed packages (⁠installed::⁠)

This is usually used internally, but can also be used directly. Full syntax:

 

installed::<path>/<package>
  • ⁠<path>⁠ is the library the package is installed to.

  • ⁠<package>⁠ is the package name.

Example:

 

installed::~/R/3.6/crayon
Package dependencies (⁠deps::⁠)

Usually used internally, it specifies the dependencies of a local package. It can be used to download or install the dependencies of a package, without downloading or installing the package itself. Full syntax:

 

deps::<path>

Examples:

 

deps::/foo/bar/package_1.0.0.tar.gz
deps::/foo/bar/pkg
deps::.
⁠any::⁠ packages

Sometimes you need to install additional packages, but you don't mind where they are installed from. Here is an example. You want to install cli from GitHub, from r-lib/cli. You also want to install glue, and you don't mind which version of glue is installed, as long as it is compatible with the requested cli version. If cli specifies the development version of glue, then that is fine. If cli is fine with the CRAN version of glue, that's OK, too. If a future version of cli does not depend on glue, you still want glue installed, from CRAN. The ⁠any::⁠ reference type does exactly this. In our example you might write

 

pak::pkg_install(c("glue", "r-lib/cli"))

first, but this will fail if rlib/cli requests (say) tidyverse/glue, because in pkg_install() "glue" is interpreted as "standard::glue", creating a conflict with tidyverse/glue. On the other hand

 

pak::pkg_install(c("any::glue", "r-lib/cli"))

works, independently of which glue version is requested by cli.

Parameter refs (⁠param::⁠)

See "Parameters" above.

The Remotes field

In the DESCRIPTION file of an R package you can mark any regular dependency defined in the Depends, Imports, Suggests or Enhances fields as being installed from a non-standard package source by adding a package reference to a Remotes entry. pak will download and install the package from the specified location, instead of a CRAN-like repository. The remote dependencies specified in Remotes are a comma separated list of package sources:

 

Remotes: <pkg-source-1>, <pkg-source-2>, [ ... ]

Note that you will still need to add the package to one of the regular dependency fields, i.e. Imports, Suggests, etc. Here is a concrete example that specifies the r-lib/glue package:

 

Imports: glue
Remotes: r-lib/glue,
  r-lib/[email protected],
  klutometis/roxygen#142,
  r-lib/testthat@c67018fa4970

The CRAN and Bioconductor repositories do not support the Remotes field, so you need to remove this field, before submitting your package to either of them.


Install specified required packages

Description

Install the specified packages, or the ones required by the package or project in the current working directory.

Usage

pak(pkg = NULL, ...)

Arguments

pkg

Package names or remote package specifications to install. See pak package sources for details. If NULL, will install all development dependencies for the current package.

...

Extra arguments are passed to pkg_install() or local_install_dev_deps().

Details

This is a convenience function:

  • If you want to install some packages, it is easier to type than pkg_install().

  • If you want to install all the packages that are needed for the development of a package or project, then it is easier to type than local_install_dev_deps().

  • You don't need to remember two functions to install packages, just one.

See Also

Other package functions: lib_status(), pkg_deps_tree(), pkg_deps(), pkg_download(), pkg_install(), pkg_remove(), pkg_status(), pkg_sysreqs()

Other local package trees: local_deps_explain(), local_deps(), local_install_deps(), local_install_dev_deps(), local_install(), local_package_trees


Environment variables and options that modify the default behavior

Description

pak behavior can be finetuned with environment variables and options (as in base::options()).

R options affecting pak's behavior

Ncpus

Set to the desired number of worker processes for package installation. If not set, then pak will use the number of logical processors in the machine.

repos

The CRAN-like repositories to use. See base::options() for details.

pak configuration

Configuration entries (unless noted otherwise on this manual page) have a corresponding environment variable, and a corresponding option.

The environment variable is always uppercase and uses underscores as the word separator. It always has the PKG_ prefix.

The option is typically lowercase, use it uses underscores as the word separator, but it always has the pkg. prefix (notice the dot!).

Some examples:

Config entry name Env var name Option name
platforms PKG_PLATFORMS pkg.platforms
cran_mirror PKG_CRAN_MIRROR pkg.cran_mirror

pak configuration entries

  • ‘build_vignettes’: (Env var: PKG_BUILD_VIGNETTES, option: pkg.build_vignettes.) Whether to build vignettes for package trees. This is only used if the package is obtained from a package tree, and not from a source (or binary) package archive. By default vignettes are not built in this case. If you set this to TRUE, then you need to make sure that the vignette builder packages are available, as these are not installed by default currently.

  • ‘cache_dir’: (Env var: PKG_CACHE_DIR, option: pkg.cache_dir.) Directory to download the packages to. Defaults to a temporary directory within the R session temporary directory, see base::tempdir().

  • ‘cran_mirror’: (Env var: PKG_CRAN_MIRROR, option: pkg.cran_mirror.) CRAN mirror to use. Defaults to the repos option (see base::options()), if that's not set then ⁠https://cran.rstudio.com⁠. See also pak::repo_add() and pak::repo_get()

  • ‘git_submodules’: (Env var: PKG_GIT_SUBMODULES, option: pkg.git_submodules.) Whether or not to update submodules in git repositories. This affects ⁠git::⁠ and ⁠gitlab::⁠ package sources only. If the R package is in a subdirectory then only the submodules within that directory are updated. If a submodule appears in .Rbuildignore, then it is skipped.

  • ‘include_linkingto’: (Env var: PKG_INCLUDE_LINKINGTO, option: pkg.include_linkingto.) Whether to always include LinkingTo dependencies in the solution of and installation, even if they are needed because the packages are installed from binaries. This is sometimes useful, see e.g. https://github.com/r-lib/pak/issues/485 for an example use case.

  • ‘library’: (Env var: PKG_LIBRARY, option: pkg.library.) Package library to install packages to. It is also used for already installed packages when considering dependencies.

  • ‘metadata_cache_dir’: (Env var: PKG_METADATA_CACHE_DIR, option: pkg.metadata_cache_dir.) Location of metadata replica of pkgcache::cranlike_metadata_cache. Defaults to a temporary directory within the R session temporary directory, see base::tempdir().

  • ‘metadata_update_after’: (Env var: PKG_METADATA_UPDATE_AFTER, option: pkg.metadata_update_after.) A time interval as a difftime object. pak will update the metadata cache if it is older than this. The default is one day. The PKG_METADATA_UPDATE_AFTER environment variable may be set in seconds (s suffix), minutes (m suffix), hours (h suffix), or days (d suffix). E.g: ⁠1d⁠ means one day.

  • ‘package_cache_dir’: (Env var: PKG_PACKAGE_CACHE_DIR, option: pkg.package_cache_dir.) Location of the package cache on the disk. See pak::cache_summary(). Default is selected by pkgcache.

  • ‘platforms’: (Env var: PKG_PLATFORMS, option: pkg.platforms.) Character vector of platforms to download or install packages for. See pkgdepends::default_platforms() for possible platform names. Defaults to the platform of the current R session, plus "source".

  • ‘r_versions’: (Env var: PKG_R_VERSIONS, option: pkg.r_versions.) Character vector, R versions to download or install packages for. It defaults to the current R version.

  • ‘sysreqs’: (Env var: PKG_SYSREQS, option: pkg.sysreqs.) Whether to automatically look up and install system requirements. If TRUE, then pkgdepends will try to install required system packages. If FALSE, then system requirements are still printed (including OS packages on supported platforms), but they are not installed. By default it is TRUE on supported platforms, if the current user is the root user or password-less sudo is configured for the current user.

  • ‘sysreqs_db_update’: (Env var: PKG_SYSREQS_DB_UPDATE, option: pkg.sysreqs_db_update.) Whether to try to update the system requirements database from GitHub. If the update fails, then the cached or the build-in database if used. Defaults to TRUE.

  • ‘sysreqs_db_update_timeout’: (Env var: PKG_SYSREQS_DB_UPDATE_TIMEOUT, option: pkg.sysreqs_db_update_timeout.) Timeout for the system requirements database update. Defaults to five seconds.

  • ‘sysreqs_dry_run’: (Env var: PKG_SYSREQS_DRY_RUN, option: pkg.sysreqs_dry_run.) If TRUE, then pak only prints the system commands to install system requirements, but does not execute them.

  • ‘sysreqs_platform’: (Env var: PKG_SYSREQS_PLATFORM, option: pkg.sysreqs_platform.) The platform to use for system requirements lookup. On Linux, where system requirements are currently supported, it must be a string containing the distribution name and release, separated by a dash. E.g.: "ubuntu-22.04", or "rhel-9".

  • ‘sysreqs_rspm_repo_id’: (Env var: PKG_SYSREQS_RSPM_REPO_ID, option: pkg.sysreqs_rspm_repo_id.) Posit Package Manager (formerly RStudio Package Manager) repository id to use for CRAN system requirements lookup. Defaults to the RSPM_REPO_ID environment variable, if set. If not set, then it defaults to 1.

  • ‘sysreqs_rspm_url’: (Env var: PKG_SYSREQS_RSPM_URL, option: pkg.sysreqs_rspm_url.) Root URL of Posit Package Manager (formerly RStudio Package Manager) for system requirements lookup. By default the RSPM_ROOT environment variable is used, if set. If not set, it defaults to ⁠https://packagemanager.posit.co⁠.

  • ‘sysreqs_sudo’: (Env var: PKG_SYSREQS_SUDO, option: pkg.sysreqs_sudo.) Whether to use sudo to install system requirements, on Unix. By default it is TRUE on Linux if the effective user id of the current process is not the root user.

  • ‘sysreqs_update’: (Env var: PKG_SYSREQS_UPDATE, option: pkg.sysreqs_update.) Whether to try to update system packages that are already installed. It defaults to TRUE on CI systems: if the CI environment variable is set to true.

  • ‘sysreqs_verbose’: (Env var: PKG_SYSREQS_VERBOSE, option: pkg.sysreqs_verbose.) Whether to echo the output of system requirements installation. Defaults to TRUE if the CI environment variable is set.

  • ‘use_bioconductor’: (Env var: PKG_USE_BIOCONDUCTOR, option: pkg.use_bioconductor.) Whether to automatically use the Bioconductor repositories. Defaults to TRUE.

  • ‘windows_archs’: (Env var: PKG_WINDOWS_ARCHS, option: pkg.windows_archs.) Character scalar specifying which architectures to download/install for on Windows. Its possible values are:

    • "prefer-x64": Generally prefer x64 binaries. If the current R session is x64, then we download/install x64 packages. (These packages might still be multi-architecture binaries!) If the current R session is i386, then we download/install packages for both architectures. This might mean compiling packages from source if the binary packages are for x64 only, like the CRAN Windows binaries for R 4.2.x currently. "prefer-x64" is the default for R 4.2.0 and later.

    • "both": Always download/install packages for both i386 and x64 architectures. This might need compilation from source if the available binaries are for x64 only, like the CRAN Windows binaries for R 4.2.x currently. "both" is the default for R 4.2.0 and earlier.

Notes

From version 0.4.0 pak copies the ⁠PKG_*⁠ environment variables and the ⁠pkg.*⁠ options to the pak subprocess, where they are actually used, so you don't need to restart R or reaload pak after a configuration change.


Clean up pak caches

Description

Clean up pak caches

Usage

pak_cleanup(
  package_cache = TRUE,
  metadata_cache = TRUE,
  pak_lib = TRUE,
  force = FALSE
)

Arguments

package_cache

Whether to clean up the cache of package files.

metadata_cache

Whether to clean up the cache of package meta data.

pak_lib

This argument is now deprecated and does nothing.

force

Do not ask for confirmation. Note that to use this function in non-interactive mode, you have to specify force = TRUE.

See Also

Other pak housekeeping: pak_sitrep()


Install all optional dependencies of pak

Description

These packages are not required for any pak functionality. They are recommended for some functions that return values that are best used with these packages. E.g. many functions return data frames, which print nicer when the pillar package is available.

Usage

pak_install_extra(upgrade = FALSE)

Arguments

upgrade

Whether to install or upgrade to the latest versions of the optional packages.

Details

Currently only one package is optional: pillar.


Set up private pak library (deprecated)

Description

This function is deprecated and does nothing. Recent versions of pak do not need a pak_setup() call.

Usage

pak_setup(mode = c("auto", "download", "copy"), quiet = FALSE)

Arguments

mode

Where to get the packages from. "download" will try to download them from CRAN. "copy" will try to copy them from your current "regular" package library. "auto" will try to copy first, and if that fails, then it tries to download.

quiet

Whether to omit messages.

Value

The path to the private library, invisibly.


pak SITuation REPort

Description

It prints

  • pak version,

  • platform the package was built on, and the current platform,

  • the current library path,

  • versions of dependencies,

  • whether dependencies can be loaded.

Usage

pak_sitrep()

Examples

pak_sitrep()
#>  compatible)
#> - pak repository: - (local install?)
#> * Optional packages installed:
#> - pillar
#> * Library path:
#> - /private/var/folders/ph/fpcmzfd16rgbbk8mxvy9m2_h0000gn/T/RtmpRxl7Vu/fi
#> le1868066d6ae59
#> - /private/var/folders/ph/fpcmzfd16rgbbk8mxvy9m2_h0000gn/T/RtmpRxl7Vu/fi
#> le186806281b34a
#> - /Users/gaborcsardi/Library/R/arm64/4.3/library
#> - /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/library
#> * Private library location:
#> - /Users/gaborcsardi/Library/Caches/org.R-project.R/R/pak/lib/4.3/aarch6
#> 4
#> * Private library exists.
#> * Private library is functional

See Also

Other pak housekeeping: pak_cleanup()


Update pak itself

Description

Use this function to update the released or development version of pak.

Usage

pak_update(force = FALSE, stream = c("auto", "stable", "rc", "devel"))

Arguments

force

Whether to force an update, even if no newer version is available.

stream

Whether to update to the

  • "stable",

  • "rc" (release candidate) or

  • "devel" (development) version.

  • "auto" updates to the same stream as the current one.

Often there is no release candidate version, then "rc" also installs the stable version.

Value

Nothing.


Look up the dependencies of a package

Description

Look up the dependencies of a package

Usage

pkg_deps(pkg, upgrade = TRUE, dependencies = NA)

Arguments

pkg

Package names or package references. E.g.

  • ggplot2: package from CRAN, Bioconductor or a CRAN-like repository in general,

  • tidyverse/ggplot2: package from GitHub,

  • tidyverse/[email protected]: package from GitHub tag or branch,

  • ⁠https://examples.com/.../ggplot2_3.3.6.tar.gz⁠: package from URL,

  • .: package in the current working directory.

See "Package sources" for more details.

upgrade

Whether to use the most recent available package versions.

dependencies

What kinds of dependencies to install. Most commonly one of the following values:

  • NA: only required (hard) dependencies,

  • TRUE: required dependencies plus optional and development dependencies,

  • FALSE: do not install any dependencies. (You might end up with a non-working package, and/or the installation might fail.) See Package dependency types for other possible values and more information about package dependencies.

Value

A data frame with the dependency data, it includes pkg as well. It has the following columns.

  • built: the Built field from the DESCRIPTION file of binary packages, for which this information is available.

  • cache_status: whether the package file is in the package cache. It is NA for ⁠installed::⁠ package refs.

  • dep_types: character vector of dependency types that were considered for this package. (This is a list column.)

  • deps: dependencies of the package, in a data frame. See "Package dependency tables" below.

  • direct: whether this package (ref, really) was directly specified, or added as a dependency.

  • error: this is a list column that contains error objects for the refs that pkgdepends failed to resolve.

  • filesize: the file size in bytes, or NA if this information is not available.

  • license: license of the package, or NA if not available.

  • md5sum: MD5 checksum of the package file, if available, or NA if not.

  • metadata: a named character vector. These fields will be (should be) added to the installed DESCRIPTION file of the package.

  • mirror: URL of the CRAN(-like) mirror site where the metadata was obtained from. It is NA for non-CRAN-like sources, e.g. local files, installed packages, GitHub, etc.

  • needscompilation: whether the package needs compilation.

  • package: package name.

  • priority: this is "base" for base packages, "recommended" for recommended packages, and NA otherwise.

  • ref: package reference.

  • remote: the parsed remote_ref objects, see parse_pkg_refs(). This is a list column.

  • repodir: the directory where this package should be in a CRAN-like repository.

  • sha256: SHA256 hash of the package file, if available, otherwise NA.

  • sources: URLs where this package can be downloaded from. This is not necessarily a URL that you can download with a HTTP client. E.g. for ⁠local::⁠ refs it is a path, and for ⁠git::⁠ refs it is a URL for git. It is a zero length vector for ⁠installed::⁠ refs.

  • status: status of the dependency resolution, "OK" or "FAILED".

  • target: path where this package should be saved in a CRAN-repository.

  • type: ref type.

  • version: package version.

Additional columns might be present. They are either used internally or they are experimental. They might be removed or changed at any time. All columns are of type character, except for direct (logical), needscompilation (logical), filesize (integer), deps (list column, see "Package dependency tables" below), sources (list of character vectors), remote (list), error (list), metadata (list), dep_types (list).

Package dependency tables

A package dependency tables in the deps list column have five columns currently:

  • ref: the package ref of the dependency.

  • type: the dependency type, in all lowercase. I.e. imports, suggests, etc.

  • package: package name of the dependency.

  • op: operator for version requirements, e.g. >=.

  • version: version number, for version requirements.

Examples

pkg_deps("dplyr")
#> # A data frame: 16 × 32                                                 
#>    ref       type  direct direc…¹ status package version license needs…²
#>    <chr>     <chr> <lgl>  <lgl>   <chr>  <chr>   <chr>   <chr>   <lgl>  
#>  1 R6        stan… FALSE  FALSE   OK     R6      2.5.1   MIT + … FALSE  
#>  2 cli       stan… FALSE  FALSE   OK     cli     3.4.1   MIT + … FALSE  
#>  3 dplyr     stan… TRUE   TRUE    OK     dplyr   1.0.10  MIT + … FALSE  
#>  4 fansi     stan… FALSE  FALSE   OK     fansi   1.0.3   GPL-2 … FALSE  
#>  5 generics  stan… FALSE  FALSE   OK     generi… 0.1.3   MIT + … FALSE  
#>  6 glue      stan… FALSE  FALSE   OK     glue    1.6.2   MIT + … FALSE  
#>  7 lifecycle stan… FALSE  FALSE   OK     lifecy… 1.0.3   MIT + … FALSE  
#>  8 magrittr  stan… FALSE  FALSE   OK     magrit… 2.0.3   MIT + … FALSE  
#>  9 pillar    stan… FALSE  FALSE   OK     pillar  1.8.1   MIT + … FALSE  
#> 10 pkgconfig stan… FALSE  FALSE   OK     pkgcon… 2.0.3   MIT + … FALSE  
#> 11 rlang     stan… FALSE  FALSE   OK     rlang   1.0.6   MIT + … FALSE  
#> 12 tibble    stan… FALSE  FALSE   OK     tibble  3.1.8   MIT + … FALSE  
#> 13 tidysele… stan… FALSE  FALSE   OK     tidyse… 1.2.0   MIT + … FALSE  
#> 14 utf8      stan… FALSE  FALSE   OK     utf8    1.2.2   Apache… FALSE  
#> 15 vctrs     stan… FALSE  FALSE   OK     vctrs   0.5.1   MIT + … FALSE  
#> 16 withr     stan… FALSE  FALSE   OK     withr   2.5.0   MIT + … FALSE  
#> # … with 23 more variables: priority <chr>, md5sum <chr>, sha256 <chr>, 
#> #   filesize <int>, built <chr>, platform <chr>, rversion <chr>,        
#> #   repotype <chr>, repodir <chr>, target <chr>, deps <list>,           
#> #   mirror <chr>, sources <list>, remote <list>, error <list>,          
#> #   metadata <list>, dep_types <list>, params <list>, sysreqs <chr>,    
#> #   cache_status <chr>, lib_status <chr>, old_version <chr>,            
#> #   new_version <chr>, and abbreviated variable names ¹​directpkg, …    

For a package on GitHub:

pkg_deps("r-lib/callr")
#> # A data frame: 4 × 32                                                  
#>   ref        type  direct direc…¹ status package version license needs…²
#>   <chr>      <chr> <lgl>  <lgl>   <chr>  <chr>   <chr>   <chr>   <lgl>  
#> 1 r-lib/cal… gith… TRUE   TRUE    OK     callr   3.7.3.… MIT + … TRUE   
#> 2 R6         stan… FALSE  FALSE   OK     R6      2.5.1   MIT + … FALSE  
#> 3 processx   stan… FALSE  FALSE   OK     proces… 3.8.0   MIT + … FALSE  
#> 4 ps         stan… FALSE  FALSE   OK     ps      1.7.2   MIT + … FALSE  
#> # … with 23 more variables: priority <chr>, md5sum <chr>, sha256 <chr>, 
#> #   filesize <int>, built <chr>, platform <chr>, rversion <chr>,        
#> #   repotype <chr>, repodir <chr>, target <chr>, deps <list>,           
#> #   mirror <chr>, sources <list>, remote <list>, error <list>,          
#> #   metadata <list>, dep_types <list>, params <list>, sysreqs <chr>,    
#> #   cache_status <chr>, lib_status <chr>, old_version <chr>,            
#> #   new_version <chr>, and abbreviated variable names ¹​directpkg, …    

See Also

Other package functions: lib_status(), pak(), pkg_deps_tree(), pkg_download(), pkg_install(), pkg_remove(), pkg_status(), pkg_sysreqs()


Explain how a package depends on other packages

Description

Extract dependency chains from pkg to deps.

Usage

pkg_deps_explain(pkg, deps, upgrade = TRUE, dependencies = NA)

Arguments

pkg

Package names or package references. E.g.

  • ggplot2: package from CRAN, Bioconductor or a CRAN-like repository in general,

  • tidyverse/ggplot2: package from GitHub,

  • tidyverse/[email protected]: package from GitHub tag or branch,

  • ⁠https://examples.com/.../ggplot2_3.3.6.tar.gz⁠: package from URL,

  • .: package in the current working directory.

See "Package sources" for more details.

deps

Package names of the dependencies to explain.

upgrade

Whether to use the most recent available package versions.

dependencies

What kinds of dependencies to install. Most commonly one of the following values:

  • NA: only required (hard) dependencies,

  • TRUE: required dependencies plus optional and development dependencies,

  • FALSE: do not install any dependencies. (You might end up with a non-working package, and/or the installation might fail.) See Package dependency types for other possible values and more information about package dependencies.

Details

This function is similar to pkg_deps_tree(), but its output is easier to read if you are only interested is certain packages (deps).

Value

A named list with a print method. First entries are the function arguments: pkg, deps, dependencies, the last one is paths and it contains the results in a named list, the names are the package names in deps.

Examples

How does dplyr depend on rlang?

pkg_deps_explain("dplyr", "rlang")
#>  Updated metadata database: 5.09 MB in 12 files.                       
#>  Updating metadata database ... done                                   
#> dplyr -> lifecycle -> rlang                                             
#> dplyr -> rlang                                                          
#> dplyr -> tibble -> lifecycle -> rlang                                   
#> dplyr -> tibble -> pillar -> lifecycle -> rlang                         
#> dplyr -> tibble -> pillar -> rlang                                      
#> dplyr -> tibble -> pillar -> vctrs -> lifecycle -> rlang                
#> dplyr -> tibble -> pillar -> vctrs -> rlang                             
#> dplyr -> tibble -> rlang                                                
#> dplyr -> tibble -> vctrs -> lifecycle -> rlang                          
#> dplyr -> tibble -> vctrs -> rlang                                       
#> dplyr -> tidyselect -> lifecycle -> rlang                               
#> dplyr -> tidyselect -> rlang                                            
#> dplyr -> tidyselect -> vctrs -> lifecycle -> rlang                      
#> dplyr -> tidyselect -> vctrs -> rlang                                   
#> dplyr -> vctrs -> lifecycle -> rlang                                    
#> dplyr -> vctrs -> rlang                                                 
#> dplyr -> pillar -> lifecycle -> rlang                                   
#> dplyr -> pillar -> rlang                                                
#> dplyr -> pillar -> vctrs -> lifecycle -> rlang                          
#> dplyr -> pillar -> vctrs -> rlang                                       

How does the GH version of usethis depend on cli and ps?

pkg_deps_explain("r-lib/usethis", c("cli", "ps"))
#> usethis -> cli                                                          
#> usethis -> desc -> cli                                                  
#> usethis -> gh -> cli                                                    
#> usethis -> lifecycle -> cli                                             
#>                                                                         
#> x ps                                                                    

Draw the dependency tree of a package

Description

Draw the dependency tree of a package

Usage

pkg_deps_tree(pkg, upgrade = TRUE, dependencies = NA)

Arguments

pkg

Package names or package references. E.g.

  • ggplot2: package from CRAN, Bioconductor or a CRAN-like repository in general,

  • tidyverse/ggplot2: package from GitHub,

  • tidyverse/[email protected]: package from GitHub tag or branch,

  • ⁠https://examples.com/.../ggplot2_3.3.6.tar.gz⁠: package from URL,

  • .: package in the current working directory.

See "Package sources" for more details.

upgrade

Whether to use the most recent available package versions.

dependencies

What kinds of dependencies to install. Most commonly one of the following values:

  • NA: only required (hard) dependencies,

  • TRUE: required dependencies plus optional and development dependencies,

  • FALSE: do not install any dependencies. (You might end up with a non-working package, and/or the installation might fail.) See Package dependency types for other possible values and more information about package dependencies.

Value

The same data frame as pkg_deps(), invisibly.

Examples

pkg_deps_tree("dplyr")
#> dplyr 1.0.10                                                           
#> ├─generics 0.1.3                                                       
#> ├─glue 1.6.2                                                           
#> ├─lifecycle 1.0.3                                                      
#> │ ├─cli 3.4.1                                                          
#> │ ├─glue                                                                
#> │ └─rlang 1.0.6                                                        
#> ├─magrittr 2.0.3                                                       
#> ├─R6 2.5.1                                                             
#> ├─rlang                                                                 
#> ├─tibble 3.1.8                                                         
#> │ ├─fansi 1.0.3                                                        
#> │ ├─lifecycle                                                           
#> │ ├─magrittr                                                            
#> │ ├─pillar 1.8.1                                                       
#> │ │ ├─cli                                                               
#> │ │ ├─fansi                                                             
#> │ │ ├─glue                                                              
#> │ │ ├─lifecycle                                                         
#> │ │ ├─rlang                                                             
#> │ │ ├─utf8 1.2.2                                                       
#> │ │ └─vctrs 0.5.1                                                      
#> │ │   ├─cli                                                             
#> │ │   ├─glue                                                            
#> │ │   ├─lifecycle                                                       
#> │ │   └─rlang                                                           
#> │ ├─pkgconfig 2.0.3                                                    
#> │ ├─rlang                                                               
#> │ └─vctrs                                                               
#> ├─tidyselect 1.2.0                                                     
#> │ ├─cli                                                                 
#> │ ├─glue                                                                
#> │ ├─lifecycle                                                           
#> │ ├─rlang                                                               
#> │ ├─vctrs                                                               
#> │ └─withr 2.5.0                                                        
#> ├─vctrs                                                                 
#> └─pillar                                                                
#>                                                                         
#> Key:   new                                                             
pkg_deps_tree("r-lib/usethis")
#> r-lib/usethis 2.1.6.9000 ✨👷🏼🔧                                           
#> ├─cli 3.4.1                                                            
#> ├─clipr 0.8.0                                                          
#> ├─crayon 1.5.2                                                         
#> ├─curl 4.3.3                                                           
#> ├─desc 1.4.2                                                           
#> │ ├─cli                                                                 
#> │ ├─R6 2.5.1                                                           
#> │ └─rprojroot 2.0.3                                                    
#> ├─fs 1.5.2                                                             
#> ├─gert 1.9.2 ✨ ⬇ (1.91 MB)                                              
#> │ ├─askpass 1.1                                                        
#> │ │ └─sys 3.4.1                                                        
#> │ ├─credentials 1.3.2 ✨ ⬇ (170.15 kB)                                   
#> │ │ ├─openssl 2.0.5                                                    
#> │ │ │ └─askpass                                                         
#> │ │ ├─sys                                                               
#> │ │ ├─curl                                                              
#> │ │ ├─jsonlite 1.8.4                                                   
#> │ │ └─askpass                                                           
#> │ ├─openssl                                                             
#> │ ├─rstudioapi 0.14                                                    
#> │ ├─sys                                                                 
#> │ └─zip 2.2.2                                                          
#> ├─gh 1.3.1 ✨ ⬇ (95.20 kB)                                               
#> │ ├─cli                                                                 
#> │ ├─gitcreds 0.1.2 ✨ ⬇ (95.59 kB)                                       
#> │ ├─httr 1.4.4                                                         
#> │ │ ├─curl                                                              
#> │ │ ├─jsonlite                                                          
#> │ │ ├─mime 0.12                                                        
#> │ │ ├─openssl                                                           
#> │ │ └─R6                                                                
#> │ ├─ini 0.3.1 ✨ ⬇ (13.13 kB)                                            
#> │ └─jsonlite                                                            
#> ├─glue 1.6.2                                                           
#> ├─jsonlite                                                              
#> ├─lifecycle 1.0.3                                                      
#> │ ├─cli                                                                 
#> │ ├─glue                                                                
#> │ └─rlang 1.0.6                                                        
#> ├─purrr 0.3.5                                                          
#> │ ├─magrittr 2.0.3                                                     
#> │ └─rlang                                                               
#> ├─rappdirs 0.3.3                                                       
#> ├─rlang                                                                 
#> ├─rprojroot                                                             
#> ├─rstudioapi                                                            
#> ├─whisker 0.4.1 ✨ ⬇ (65.36 kB)                                          
#> ├─withr 2.5.0                                                          
#> └─yaml 2.3.6                                                           
#>                                                                         
#> Key:   new |  download | 👷🏼 build | 🔧 compile                        

See Also

Other package functions: lib_status(), pak(), pkg_deps(), pkg_download(), pkg_install(), pkg_remove(), pkg_status(), pkg_sysreqs()


Download a package and its dependencies

Description

TODO: explain result

Usage

pkg_download(
  pkg,
  dest_dir = ".",
  dependencies = FALSE,
  platforms = NULL,
  r_versions = NULL
)

Arguments

pkg

Package names or package references. E.g.

  • ggplot2: package from CRAN, Bioconductor or a CRAN-like repository in general,

  • tidyverse/ggplot2: package from GitHub,

  • tidyverse/[email protected]: package from GitHub tag or branch,

  • ⁠https://examples.com/.../ggplot2_3.3.6.tar.gz⁠: package from URL,

  • .: package in the current working directory.

See "Package sources" for more details.

dest_dir

Destination directory for the packages. If it does not exist, then it will be created.

dependencies

What kinds of dependencies to install. Most commonly one of the following values:

  • NA: only required (hard) dependencies,

  • TRUE: required dependencies plus optional and development dependencies,

  • FALSE: do not install any dependencies. (You might end up with a non-working package, and/or the installation might fail.) See Package dependency types for other possible values and more information about package dependencies.

platforms

Types of binary or source packages to download. The default is the value of pkgdepends::default_platforms().

r_versions

R version(s) to download packages for. (This does not matter for source packages, but it does for binaries.) It defaults to the current R version.

Value

Data frame with information about the downloaded packages, invisibly. Columns:

  • built: the Built field from the DESCRIPTION file of binary packages, for which this information is available.

  • cache_status: whether the package file is in the package cache. It is NA for ⁠installed::⁠ package refs.

  • dep_types: character vector of dependency types that were considered for this package. (This is a list column.)

  • deps: dependencies of the package, in a data frame. See "Package dependency tables" below.

  • direct: whether this package (ref, really) was directly specified, or added as a dependency.

  • error: this is a list column that contains error objects for the refs that pkgdepends failed to resolve.

  • filesize: the file size in bytes, or NA if this information is not available.

  • license: license of the package, or NA if not available.

  • md5sum: MD5 checksum of the package file, if available, or NA if not.

  • metadata: a named character vector. These fields will be (should be) added to the installed DESCRIPTION file of the package.

  • mirror: URL of the CRAN(-like) mirror site where the metadata was obtained from. It is NA for non-CRAN-like sources, e.g. local files, installed packages, GitHub, etc.

  • needscompilation: whether the package needs compilation.

  • package: package name.

  • priority: this is "base" for base packages, "recommended" for recommended packages, and NA otherwise.

  • ref: package reference.

  • remote: the parsed remote_ref objects, see parse_pkg_refs(). This is a list column.

  • repodir: the directory where this package should be in a CRAN-like repository.

  • sha256: SHA256 hash of the package file, if available, otherwise NA.

  • sources: URLs where this package can be downloaded from. This is not necessarily a URL that you can download with a HTTP client. E.g. for ⁠local::⁠ refs it is a path, and for ⁠git::⁠ refs it is a URL for git. It is a zero length vector for ⁠installed::⁠ refs.

  • status: status of the dependency resolution, "OK" or "FAILED".

  • target: path where this package should be saved in a CRAN-repository.

  • type: ref type.

  • version: package version.

  • fulltarget: absolute path to the downloaded file. At most one of fulltarget and fulltarget_tree must exist on the disk.

  • fulltarget_tree: absolute path to a package tree directory. At most one of fulltarget and fulltarget_tree must exist on the disk.

  • download_status: "Had" or "Got", depending on whether the file was obtained from the cache.

  • download_error: error object for failed downloads.

  • file_size: Size of the file, or NA. For ⁠installed::⁠ refs, it is NA, and it is also NA for refs that created fulltarget_tree instead of fulltarget.

fulltarget, if it exists, contains a packaged (via ⁠R CMD build⁠) source R package. If fulltarget_tree exists, it is a package tree directory, that still needs an ⁠R CMD build⁠ call. Additional columns might be present. They are either used internally or they are experimental. They might be removed or changed at any time. All columns are of type character, except for direct (logical), needscompilation (logical), filesize (integer), deps (list column, see "Package dependency tables" below), sources (list of character vectors), remote (list), error (list), metadata (list), dep_types (list).

Package dependency tables

A package dependency tables in the deps list column have five columns currently:

  • ref: the package ref of the dependency.

  • type: the dependency type, in all lowercase. I.e. imports, suggests, etc.

  • package: package name of the dependency.

  • op: operator for version requirements, e.g. >=.

  • version: version number, for version requirements.

Examples

dl <- pkg_download("forcats")
#>  No downloads are needed, 2 pkgs (641.53 kB) are cached                
dl
#> # A data frame: 2 × 35                                                  
#>   ref     type     direct direc…¹ status package version license needs…²
#>   <chr>   <chr>    <lgl>  <lgl>   <chr>  <chr>   <chr>   <chr>   <lgl>  
#> 1 forcats standard TRUE   TRUE    OK     forcats 0.5.2   MIT + … FALSE  
#> 2 forcats standard TRUE   TRUE    OK     forcats 0.5.2   MIT + … FALSE  
#> # … with 26 more variables: priority <chr>, md5sum <chr>, sha256 <chr>, 
#> #   filesize <int>, built <chr>, platform <chr>, rversion <chr>,        
#> #   repotype <chr>, repodir <chr>, target <chr>, deps <list>,           
#> #   mirror <chr>, sources <list>, remote <list>, error <list>,          
#> #   metadata <list>, extra <list>, dep_types <list>, params <list>,     
#> #   sysreqs <chr>, cache_status <chr>, fulltarget <chr>,                
#> #   fulltarget_tree <chr>, download_status <chr>, …                     
dl$fulltarget
#> [1] "./bin/macosx/big-sur-arm64/contrib/4.2/forcats_0.5.2.tgz"          
#> [2] "./src/contrib/forcats_0.5.2.tar.gz"                                
pkg_download("r-lib/pak", platforms = "source")
#>  No downloads are needed, 1 pkg is cached                              

See Also

Other package functions: lib_status(), pak(), pkg_deps_tree(), pkg_deps(), pkg_install(), pkg_remove(), pkg_status(), pkg_sysreqs()


Query the history of a CRAN package

Description

Query the history of a CRAN package

Usage

pkg_history(pkg)

Arguments

pkg

Package name.

Value

A data frame, with one row per package version. The columns are the entries of the DESCRIPTION files in the released package versions.

Examples

pkg_history("ggplot2")
#> # A data frame: 44 × 30                                                 
#>    Package Type    Title    Version Date  Author Maint…¹ Descr…² License
#>  * <chr>   <chr>   <chr>    <chr>   <chr> <chr>  <chr>   <chr>   <chr>  
#>  1 ggplot2 Package An impl… 0.5     2007… Hadle… Hadley… "An im… GPL    
#>  2 ggplot2 Package An impl… 0.5.1   2007… Hadle… Hadley… "An im… GPL    
#>  3 ggplot2 Package An impl… 0.5.2   2007… Hadle… Hadley… "An im… GPL    
#>  4 ggplot2 Package An impl… 0.5.4   2007… Hadle… Hadley… "An im… GPL    
#>  5 ggplot2 Package An impl… 0.5.5   2007… Hadle… Hadley… "An im… GPL    
#>  6 ggplot2 Package An impl… 0.5.6   2007… Hadle… Hadley… "An im… GPL    
#>  7 ggplot2 Package An impl… 0.5.7   2007… Hadle… Hadley… "An im… GPL    
#>  8 ggplot2 Package An impl… 0.6     2008… Hadle… Hadley… "An im… GPL    
#>  9 ggplot2 Package An impl… 0.7     2008… Hadle… Hadley… "An im… GPL    
#> 10 ggplot2 Package An impl… 0.8     2008… Hadle… Hadley… "An im… GPL    
#> # … with 34 more rows, 21 more variables: SaveImage <chr>,              
#> #   LazyData <chr>, Packaged <chr>, crandb_file_date <chr>, date <chr>, 
#> #   dependencies <list>, URL <chr>, LazyLoad <chr>, Extends <chr>,      
#> #   Collate <chr>, Repository <chr>, `Date/Publication` <chr>,          
#> #   NeedsCompilation <chr>, VignetteBuilder <chr>, BugReports <chr>,    
#> #   `Authors@R` <chr>, RoxygenNote <chr>, Encoding <chr>, MD5sum <chr>, 
#> #   `Config/Needs/website` <chr>, `Config/testthat/edition` <chr>, …    

Install packages

Description

Install one or more packages and their dependencies into a single package library.

Usage

pkg_install(
  pkg,
  lib = .libPaths()[[1L]],
  upgrade = FALSE,
  ask = interactive(),
  dependencies = NA
)

Arguments

pkg

Package names or package references. E.g.

  • ggplot2: package from CRAN, Bioconductor or a CRAN-like repository in general,

  • tidyverse/ggplot2: package from GitHub,

  • tidyverse/[email protected]: package from GitHub tag or branch,

  • ⁠https://examples.com/.../ggplot2_3.3.6.tar.gz⁠: package from URL,

  • .: package in the current working directory.

See "Package sources" for more details.

lib

Package library to install the packages to. Note that all dependent packages will be installed here, even if they are already installed in another library. The only exceptions are base and recommended packages installed in .Library. These are not duplicated in lib, unless a newer version of a recommemded package is needed.

upgrade

When FALSE, the default, pak does the minimum amount of work to give you the latest version(s) of pkg. It will only upgrade dependent packages if pkg, or one of their dependencies explicitly require a higher version than what you currently have. It will also prefer a binary package over to source package, even it the binary package is older.

When upgrade = TRUE, pak will ensure that you have the latest version(s) of pkg and all their dependencies.

ask

Whether to ask for confirmation when installing a different version of a package that is already installed. Installations that only add new packages never require confirmation.

dependencies

What kinds of dependencies to install. Most commonly one of the following values:

  • NA: only required (hard) dependencies,

  • TRUE: required dependencies plus optional and development dependencies,

  • FALSE: do not install any dependencies. (You might end up with a non-working package, and/or the installation might fail.) See Package dependency types for other possible values and more information about package dependencies.

Value

(Invisibly) A data frame with information about the installed package(s).

Examples

pkg_install("dplyr")
#>                                                                         
#> → Will install 5 packages.                                              
#> → All 5 packages (2.14 MB) are cached.                                  
#> + dplyr        1.0.9                                                    
#> + generics     0.1.2                                                    
#> + purrr        0.3.4                                                    
#> + R6           2.5.1                                                    
#> + tidyselect   1.1.2                                                    
#>  No downloads are needed, 5 pkgs (2.14 MB) are cached                  
#>  Got R6 2.5.1 (aarch64-apple-darwin20) (82.52 kB)                      
#>  Installed R6 2.5.1  (43ms)                                            
#>  Installed generics 0.1.2  (62ms)                                      
#>  Installed dplyr 1.0.9  (88ms)                                         
#>  Installed purrr 0.3.4  (88ms)                                         
#>  Installed tidyselect 1.1.2  (94ms)                                    
#>  1 pkg + 17 deps: kept 12, added 5, dld 1 (82.52 kB) [1.2s]            

Upgrade dplyr and all its dependencies:

pkg_install("dplyr", upgrade = TRUE)
#>                                                                         
#> → Will update 1 package.                                                
#> → The package (742.51 kB) is cached.                                    
#> + rlang 1.0.2 → 1.0.3 👷🏿‍♀️🔧                                            
#>  No downloads are needed, 1 pkg (742.51 kB) is cached                  
#>  Building rlang 1.0.3                                                  
#>  Built rlang 1.0.3 (5.8s)                                              
#>  Installed rlang 1.0.3  (32ms)                                         
#>  1 pkg + 17 deps: kept 17, upd 1 [6.3s]                                

Install the development version of dplyr:

pkg_install("tidyverse/dplyr")
#>  Loading metadata database ... done                                    
#>                                                                         
#> → Will install 16 packages.                                             
#> → All 16 packages (8.09 MB) are cached.                                 
#> + cli          3.4.1                                                    
#> + dplyr        1.0.99.9000 👷🏾‍♂️🔧 (GitHub: e6252f8)                     
#> + fansi        1.0.3                                                    
#> + generics     0.1.3                                                    
#> + glue         1.6.2                                                    
#> + lifecycle    1.0.3                                                    
#> + magrittr     2.0.3                                                    
#> + pillar       1.8.1                                                    
#> + pkgconfig    2.0.3                                                    
#> + R6           2.5.1                                                    
#> + rlang        1.0.6                                                    
#> + tibble       3.1.8                                                    
#> + tidyselect   1.2.0                                                    
#> + utf8         1.2.2                                                    
#> + vctrs        0.5.1                                                    
#> + withr        2.5.0                                                    
#>  No downloads are needed, 16 pkgs (8.09 MB) are cached                 
#>  Installed R6 2.5.1  (58ms)                                            
#>  Installed cli 3.4.1  (69ms)                                           
#>  Installed fansi 1.0.3  (92ms)                                         
#>  Installed generics 0.1.3  (99ms)                                      
#>  Installed glue 1.6.2  (108ms)                                         
#>  Installed lifecycle 1.0.3  (144ms)                                    
#>  Installed magrittr 2.0.3  (152ms)                                     
#>  Installed pillar 1.8.1  (160ms)                                       
#>  Installed pkgconfig 2.0.3  (63ms)                                     
#>  Installed rlang 1.0.6  (37ms)                                         
#>  Installed tibble 3.1.8  (41ms)                                        
#>  Installed tidyselect 1.2.0  (38ms)                                    
#>  Installed utf8 1.2.2  (36ms)                                          
#>  Installed vctrs 0.5.1  (39ms)                                         
#>  Installed withr 2.5.0  (30ms)                                         
#>  Packaging dplyr 1.0.99.9000                                           
#>  Packaged dplyr 1.0.99.9000 (8.3s)                                     
#>  Building dplyr 1.0.99.9000                                            
#>  Built dplyr 1.0.99.9000 (5.2s)                                        
#>  Installed dplyr 1.0.99.9000 (github::tidyverse/dplyr@e6252f8) (24ms)  
#>  1 pkg + 15 deps: added 16 [18.9s]                                     

Switch back to the CRAN version. This will be fast because pak will have cached the prior install.

pkg_install("dplyr")
#>  Updated metadata database: 2.43 MB in 6 files.                        
#>  Updating metadata database ... done                                   
#>                                                                         
#> → Will install 16 packages.                                             
#> → All 16 packages (9.42 MB) are cached.                                 
#> + cli          3.4.1                                                    
#> + dplyr        1.0.10                                                   
#> + fansi        1.0.3                                                    
#> + generics     0.1.3                                                    
#> + glue         1.6.2                                                    
#> + lifecycle    1.0.3                                                    
#> + magrittr     2.0.3                                                    
#> + pillar       1.8.1                                                    
#> + pkgconfig    2.0.3                                                    
#> + R6           2.5.1                                                    
#> + rlang        1.0.6                                                    
#> + tibble       3.1.8                                                    
#> + tidyselect   1.2.0                                                    
#> + utf8         1.2.2                                                    
#> + vctrs        0.5.1                                                    
#> + withr        2.5.0                                                    
#>  No downloads are needed, 16 pkgs (9.42 MB) are cached                 
#>  Installed R6 2.5.1  (66ms)                                            
#>  Installed cli 3.4.1  (76ms)                                           
#>  Installed dplyr 1.0.10  (111ms)                                       
#>  Installed fansi 1.0.3  (119ms)                                        
#>  Installed generics 0.1.3  (125ms)                                     
#>  Installed glue 1.6.2  (132ms)                                         
#>  Installed lifecycle 1.0.3  (149ms)                                    
#>  Installed magrittr 2.0.3  (162ms)                                     
#>  Installed pillar 1.8.1  (56ms)                                        
#>  Installed pkgconfig 2.0.3  (35ms)                                     
#>  Installed rlang 1.0.6  (57ms)                                         
#>  Installed tibble 3.1.8  (41ms)                                        
#>  Installed tidyselect 1.2.0  (40ms)                                    
#>  Installed utf8 1.2.2  (37ms)                                          
#>  Installed vctrs 0.5.1  (39ms)                                         
#>  Installed withr 2.5.0  (31ms)                                         
#>  1 pkg + 15 deps: added 16 [7.2s]                                      

See Also

Get started with pak, Package sources, FAQ, The dependency solver.

Other package functions: lib_status(), pak(), pkg_deps_tree(), pkg_deps(), pkg_download(), pkg_remove(), pkg_status(), pkg_sysreqs()


Check if an R package name is available

Description

Additionally, look up the candidate name in a number of dictionaries, to make sure that it does not have a negative meaning.

Usage

pkg_name_check(name, dictionaries = NULL)

Arguments

name

Package name candidate.

dictionaries

Character vector, the dictionaries to query. Available dictionaries: * wikipedia * wiktionary, * sentiment (https://github.com/fnielsen/afinn), * urban (Urban Dictionary). If NULL (by default), the Urban Dictionary is omitted, as it is often offensive.

Details

Valid package name check

Check the validity of name as a package name. See 'Writing R Extensions' for the allowed package names. Also checked against a list of names that are known to cause problems.

CRAN checks

Check name against the names of all past and current packages on CRAN, including base and recommended packages.

Bioconductor checks

Check name against all past and current Bioconductor packages.

Profanity check

Check name with https://www.purgomalum.com/service/containsprofanity to make sure it is not a profanity.

Dictionaries

See the dictionaries argument.

Value

pkg_name_check object with a custom print method.

Examples

pkg_name_check("sicily")
#> ╔══════════════════════════════════════════════════════════════════════╗
#>                             –*– sicily –*–                            
#> ╚══════════════════════════════════════════════════════════════════════╝
#> ┌──────────────────────────────────────────────────────────────────────┐
#>    valid name            CRAN                 Bioconductor         
#>    not a profanity                                                   
#> └──────────────────────────────────────────────────────────────────────┘
#> Wikipedia ───────────────────────────────────────────────────────────┐
#>  Sicily Sicily (Italian: Sicilia [siˈtʃiːlja], Sicilian               
#>  pronunciation: [sɪˈʃiːlja]) is the largest island in the             
#>  Mediterranean Sea and one of the 20 regions of Italy. The Strait of  
#>  Messina divides it from the region of Calabria in Southern Italy.    
#>  It is one of the five Italian autonomous regions and is officially   
#>  referred to as Regione Siciliana. The region has 5 million           
#> 
#> └──────────────────────────────── https://en.wikipedia.org/wiki/Sicily
#> Wiktionary ──────────────────────────────────────────────────────────┐
#>  sicily No English definition found                                   
#> └────────────────────────────────────────────────────────────────────  ┘
#> ┌──────────────────────────────────────────────────────────────────────┐
#>  Sentiment: 😐 (0)                                                     
#> └──────────────────────────────────────────────────────────────────────┘

Remove installed packages

Description

Remove installed packages

Usage

pkg_remove(pkg, lib = .libPaths()[[1L]])

Arguments

pkg

A character vector of packages to remove.

lib

library to remove packages from.

Value

Nothing.

See Also

Other package functions: lib_status(), pak(), pkg_deps_tree(), pkg_deps(), pkg_download(), pkg_install(), pkg_status(), pkg_sysreqs()


Display installed locations of a package

Description

Display installed locations of a package

Usage

pkg_status(pkg, lib = .libPaths())

Arguments

pkg

Name of one or more installed packages to display status for.

lib

One or more library paths to lookup packages status in. By default all libraries are used.

Value

Data frame with data about installations of pkg. It has always has columns:

  • biocviews: the corresponding field from DESCRIPTION, it must be present for all Bioconductor packages, other packages typically don't have it.

  • built: the Built field from DESCRIPTION.

  • depends, suggests, Imports, linkingto, enhances: the corresponding fields from the DESCRIPTION files.

  • deps: A list or data frames, the dependencies of the package. It has columns: ref, type (dependency type in lowercase), package (dependent package, or R), op and version, for last two are for version requirement. op can be >=, >, == or <=, although the only the first one is common in practice.

  • library: path to the package library containing the package.

  • license: from DESCRIPTION.

  • md5sum: from DESCTIPTION, typically NA, except on Windows.

  • needscompilation: from DESCRIPTION, this column is logical.

  • package: package name.

  • platform: from the Built field in DESCRIPTION, the current platform if missing from DESCRIPTION.

  • priority: from DESCRIPTION, usually base, recommended, or missing.

  • ref: the corresponding ⁠installed::*⁠ package reference.

  • repository: from DESCRIPTION. For packages from a CRAN repository this is CRAN, some other repositories, e.g. R-universe adds the repository URL here.

  • repotype: cran, bioc or missing.

  • rversion: from the Built field. If no such field, then the current R version.

  • sysreqs: the SystemRequirements field from DESCRIPTION.

  • title: package title.

  • type: always installed.

  • version: package version (as string).

Most of these columns are unchanged from DESCRIPTION, but pak also adds a couple.

Notes:

  • In addition, it also has all ⁠remote*⁠ and ⁠config/needs/*⁠ entries from the DESCRIPTION files. (Case insensitive.)

  • All columns are of type character, except for needscompilation, which is logical and deps, which is a list columns.

  • If an entry is missing for a package, it is set to NA.

  • Note that column names are lowercase, even if the corresponding entries are not in DESCRIPTION.

  • The order of the columns is not deterministic, so don't assume any order.

  • Additional columns might be present, these are internal for pak and should not be used in user code.

Examples

pkg_status("MASS")
#> # A data frame: 2 × 39                                                  
#>   library    package title version depends repos…¹ license needs…² built
#> * <chr>      <chr>   <chr> <chr>   <chr>   <chr>   <chr>   <lgl>   <chr>
#> 1 /Users/ga… MASS    Supp… 7.3-58… R (>= … CRAN    GPL-2 … TRUE    R 4.…
#> 2 /Library/… MASS    Supp… 7.3-58… R (>= … CRAN    GPL-2 … TRUE    R 4.…
#> # … with 30 more variables: remotetype <chr>, remotepkgref <chr>,       
#> #   remoteref <chr>, remoterepos <chr>, remotepkgplatform <chr>,        
#> #   remotesha <chr>, imports <chr>, suggests <chr>, linkingto <chr>,    
#> #   remotes <chr>, remotehost <chr>, remoterepo <chr>,                  
#> #   remoteusername <chr>, enhances <chr>, biocviews <chr>,              
#> #   remoteurl <chr>, remotesubdir <chr>, priority <chr>,                
#> #   remoteetag <chr>, remotepackaged <chr>, md5sum <chr>, …             

See Also

Other package functions: lib_status(), pak(), pkg_deps_tree(), pkg_deps(), pkg_download(), pkg_install(), pkg_remove(), pkg_sysreqs()


Calculate system requirements of one of more packages

Description

Calculate system requirements of one of more packages

Usage

pkg_sysreqs(pkg, upgrade = TRUE, dependencies = NA, sysreqs_platform = NULL)

Arguments

pkg

Package names or package references. E.g.

  • ggplot2: package from CRAN, Bioconductor or a CRAN-like repository in general,

  • tidyverse/ggplot2: package from GitHub,

  • tidyverse/[email protected]: package from GitHub tag or branch,

  • ⁠https://examples.com/.../ggplot2_3.3.6.tar.gz⁠: package from URL,

  • .: package in the current working directory.

See "Package sources" for more details.

upgrade

When FALSE, the default, pak does the minimum amount of work to give you the latest version(s) of pkg. It will only upgrade dependent packages if pkg, or one of their dependencies explicitly require a higher version than what you currently have. It will also prefer a binary package over to source package, even it the binary package is older.

When upgrade = TRUE, pak will ensure that you have the latest version(s) of pkg and all their dependencies.

dependencies

What kinds of dependencies to install. Most commonly one of the following values:

  • NA: only required (hard) dependencies,

  • TRUE: required dependencies plus optional and development dependencies,

  • FALSE: do not install any dependencies. (You might end up with a non-working package, and/or the installation might fail.) See Package dependency types for other possible values and more information about package dependencies.

sysreqs_platform

System requirements platform.

If NULL, then the sysreqs_platform configuration option is used, which defaults to the current platform.

Set this option if to one of "alpine", "centos", "debian", "fedora", "opensuse", "redhat", "redhat", "redhat", "rhel", "rhel", "rhel", "rhel", "rhel", "rhel", "rhel", "rhel", "rhel", "rhel", "rhel", "rockylinux", "sle", "ubuntu" if pak fails to correctly detect your platform or if you want to see the system requirements for a different platform.

Value

List with entries:

  • os: character string. Operating system.

  • distribution: character string. Linux distribution, NA if the OS is not Linux.

  • version: character string. Distribution version, NA is the OS is not Linux.

  • pre_install: character vector. Commands to run before the installation of system packages.

  • install_scripts: character vector. Commands to run to install the system packages.

  • post_install: character vector. Commands to run after the installation of system packages.

  • packages: data frame. Information about the system packages that are needed. It has columns:

    • sysreq: string, cross-platform name of the system requirement.

    • packages: list column of character vectors. The names of the R packages that have this system requirement.

    • pre_install: list column of character vectors. Commands run before the package installation for this system requirement.

    • system_packages: list column of character vectors. Names of system packages to install.

    • post_install: list column of character vectors. Commands run after the package installation for this system requirement.

See Also

Other package functions: lib_status(), pak(), pkg_deps(), pkg_deps_tree(), pkg_download(), pkg_install(), pkg_remove(), pkg_status()

Other system requirements functions: sysreqs_check_installed(), sysreqs_db_list(), sysreqs_db_match(), sysreqs_db_update(), sysreqs_is_supported(), sysreqs_list_system_packages(), sysreqs_platforms()


Does PPM build binary packages for the current platform?

Description

Does PPM build binary packages for the current platform?

Usage

ppm_has_binaries()

Value

TRUE or FALSE.

See Also

The 'pkgcache and Posit Package Manager on Linux' article at https://r-lib.github.io/pkgcache/.

Other PPM functions: ppm_platforms(), ppm_r_versions(), ppm_repo_url(), ppm_snapshots()

Examples

system_r_platform()
ppm_has_binaries()

List all platforms supported by Posit Package Manager (PPM)

Description

List all platforms supported by Posit Package Manager (PPM)

Usage

ppm_platforms()

Value

Data frame with columns:

  • name: platform name, this is essentially an identifier,

  • os: operating system, linux, windows or macOS currently,

  • binary_url: the URL segment of the binary repository URL of this platform, see ppm_snapshots().

  • distribution: for Linux platforms the name of the distribution,

  • release: for Linux platforms, the name of the release,

  • binaries: whether PPM builds binaries for this platform.

See Also

The 'pkgcache and Posit Package Manager on Linux' article at https://r-lib.github.io/pkgcache/.

Other PPM functions: ppm_has_binaries(), ppm_r_versions(), ppm_repo_url(), ppm_snapshots()

Examples

ppm_platforms()

List all R versions supported by Posit Package Manager (PPM)

Description

List all R versions supported by Posit Package Manager (PPM)

Usage

ppm_r_versions()

Value

Data frame with columns:

  • r_version: minor R versions, i.e. version numbers containing the first two components of R versions supported by this PPM instance.

See Also

The 'pkgcache and Posit Package Manager on Linux' article at https://r-lib.github.io/pkgcache/.

Other PPM functions: ppm_has_binaries(), ppm_platforms(), ppm_repo_url(), ppm_snapshots()

Examples

ppm_r_versions()

Returns the current Posit Package Manager (PPM) repository URL

Description

Returns the current Posit Package Manager (PPM) repository URL

Usage

ppm_repo_url()

Details

This URL has the form {base}/{repo}, e.g. ⁠https://packagemanager.posit.co/all⁠.

To configure a hosted PPM instance, set the PKGCACHE_PPM_URL environment variable to the base URL (e.g. ⁠https://packagemanager.posit.co⁠).

To use repo_add() with PPM snapshots, you may also set the PKGCACHE_PPM_REPO environment variable to the name of the default repository.

On Linux, instead of setting these environment variables, you can also add a PPM repository to the repos option, see base::options(). In the environment variables are not set, then ppm_repo_url() will try extract the PPM base URL and repository name from this option.

If the PKGCACHE_PPM_URL environment variable is not set, and the repos option does not contain a PPM URL (on Linux), then pak uses the public PPM instance at ⁠https://packagemanager.posit.co⁠, with the cran repository.

Value

String scalar, the repository URL of the configured PPM instance. If no PPM instance is configured, then the URL of the Posit Public Package Manager instance. It includes the repository name, e.g. ⁠https://packagemanager.posit.co/all⁠.

See Also

The 'pkgcache and Posit Package Manager on Linux' article at https://r-lib.github.io/pkgcache/.

repo_resolve() and repo_add() to find and configure PPM snapshots.

Other PPM functions: ppm_has_binaries(), ppm_platforms(), ppm_r_versions(), ppm_snapshots()

Examples

ppm_repo_url()

List all available Posit Package Manager (PPM) snapshots

Description

List all available Posit Package Manager (PPM) snapshots

Usage

ppm_snapshots()

Details

The repository URL of a snapshot has the following form on Windows:

{base}/{repo}/{id}

where {base} is the base URL for PPM (see ppm_repo_url()) and {id} is either the date or id of the snapshot, or latest for the latest snapshot. E.g. these are equivalent:

https://packagemanager.posit.co/cran/5
https://packagemanager.posit.co/cran/2017-10-10

On a Linux distribution that has PPM support, the repository URL that contains the binary packages looks like this:

{base}/{repo}/__linux__/{binary_url}/{id}

where {id} is as before, and {binary_url} is a code name for a release of a supported Linux distribution. See the binary_url column of the result of ppm_platforms() for these code names.

Value

Data frame with two columns:

  • date: the time the snapshot was taken, a POSIXct vector,

  • id: integer id of the snapshot, this can be used in the repository URL.

See Also

The 'pkgcache and Posit Package Manager on Linux' article at https://r-lib.github.io/pkgcache/.

Other PPM functions: ppm_has_binaries(), ppm_platforms(), ppm_r_versions(), ppm_repo_url()

Examples

ppm_snapshots()

Add a new CRAN-like repository

Description

Add a new repository to the list of repositories that pak uses to look for packages.

Usage

repo_add(..., .list = NULL)

repo_resolve(spec)

Arguments

...

Repository specifications, possibly named character vectors. See details below.

.list

List or character vector of repository specifications. This argument is easier to use programmatically than .... See details below.

spec

Repository specification, a possibly named character scalar.

Details

repo_add() adds new repositories. It resolves the specified repositories using repo_resolve() and then modifies the repos global option.

repo_add() only has an effect in the current R session. If you want to keep your configuration between R sessions, then set the repos option to the desired value in your user or project .Rprofile file.

Value

repo_resolve() returns a named character scalar, the URL of the repository.

Repository specifications

The format of a repository specification is a named or unnamed character scalar. If the name is missing, pak adds a name automatically. The repository named CRAN is the main CRAN repository, but otherwise names are informational.

Currently supported repository specifications:

  • URL pointing to the root of the CRAN-like repository. Example:

    https://cloud.r-project.org
    
  • PPM@latest, PPM (Posit Package Manager, formerly RStudio Package Manager), the latest snapshot.

  • ⁠PPM@<date>⁠, PPM (Posit Package Manager, formerly RStudio Package Manager) snapshot, at the specified date.

  • ⁠PPM@<package>-<version>⁠ PPM snapshot, for the day after the release of ⁠<version>⁠ of ⁠<package>⁠.

  • ⁠PPM@R-<version>⁠ PPM snapshot, for the day after R ⁠<version>⁠ was released.

Still works for dates starting from 2017-10-10, but now deprecated, because MRAN is discontinued:

  • ⁠MRAN@<date>⁠, MRAN (Microsoft R Application Network) snapshot, at the specified date.

  • ⁠MRAN@<package>-<version>⁠ MRAN snapshot, for the day after the release of ⁠<version>⁠ of ⁠<package>⁠.

  • ⁠MRAN@R-<version>⁠ MRAN snapshot, for the day after R ⁠<version>⁠ was released.

Notes:

Examples

repo_add(PPMdplyr100 = "[email protected]")
repo_get()
#> # A data frame: 7 × 5                                                   
#>   name          url                         type  r_version bioc_version
#> * <chr>         <chr>                       <chr> <chr>     <chr>       
#> 1 CRAN          https://cloud.r-project.org cran  *         NA          
#> 2 PPMdplyr100   https://packagemanager.pos… cran… *         NA          
#> 3 BioCsoft      https://bioconductor.org/p… bioc  4.3.1     3.17        
#> 4 BioCann       https://bioconductor.org/p… bioc  4.3.1     3.17        
#> 5 BioCexp       https://bioconductor.org/p… bioc  4.3.1     3.17        
#> 6 BioCworkflows https://bioconductor.org/p… bioc  4.3.1     3.17        
#> 7 BioCbooks     https://bioconductor.org/p… bioc  4.3.1     3.17        
repo_resolve("PPM@2020-01-21")
#>                                       CRAN                              
#> "https://packagemanager.posit.co/cran/245"                              
repo_resolve("[email protected]")
#>                                       CRAN                              
#> "https://packagemanager.posit.co/cran/289"                              
repo_resolve("[email protected]")
#>                                       CRAN                              
#> "https://packagemanager.posit.co/cran/276"                              

See Also

Other repository functions: repo_get(), repo_status()


Query the currently configured CRAN-like repositories

Description

pak uses the repos option, see options(). It also automatically adds a CRAN mirror if none is set up, and the correct version of the Bioconductor repositories. See the cran_mirror and bioc arguments.

Usage

repo_get(r_version = getRversion(), bioc = NULL, cran_mirror = NULL)

Arguments

r_version

R version to use to determine the correct Bioconductor version, if bioc = TRUE.

bioc

Whether to automatically add the Bioconductor repositories to the result.

cran_mirror

CRAN mirror to use. Leave it at NULL to use the mirror in getOption("repos") or an automatically selected one.

Details

repo_get() returns the table of the currently configured repositories.

Examples

repo_get()
#> # A data frame: 5 × 5                                                   
#>   name          url                                type  r_ver…¹ bioc_…²
#> * <chr>         <chr>                              <chr> <chr>   <chr>  
#> 1 CRAN          https://cloud.r-project.org        cran  *       NA     
#> 2 BioCsoft      https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 3 BioCann       https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 4 BioCexp       https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> 5 BioCworkflows https://bioconductor.org/packages… bioc  4.2.2   3.16   
#> # … with abbreviated variable names ¹​r_version, ²​bioc_version         

See Also

Other repository functions: repo_add(), repo_status()


Show the status of CRAN-like repositories

Description

It checks the status of the configured or supplied repositories.

Usage

repo_status(
  platforms = NULL,
  r_version = getRversion(),
  bioc = NULL,
  cran_mirror = NULL
)

repo_ping(
  platforms = NULL,
  r_version = getRversion(),
  bioc = NULL,
  cran_mirror = NULL
)

Arguments

platforms

Platforms to use, default is the current platform, plus source packages, via the pkg.platforms option.

r_version

R version(s) to use, the default is the current R version, via getRversion().

bioc

Whether to add the Bioconductor repositories. If you already configured them via options(repos), then you can set this to FALSE. Defaults to the pkg.use_bioconductor option.

cran_mirror

The CRAN mirror to use. Defaults to the pkg.cran_mirror option.

Details

repo_ping() is similar to repo_status() but also prints a short summary of the data, and it returns its result invisibly.

Value

A data frame that has a row for every repository, on every queried platform and R version. It has these columns:

  • name: the name of the repository. This comes from the names of the configured repositories in options("repos"), or added by pak. It is typically CRAN for CRAN, and the current Bioconductor repositories are BioCsoft, BioCann, BioCexp, BioCworkflows.

  • url: base URL of the repository.

  • bioc_version: Bioconductor version, or NA for non-Bioconductor repositories.

  • platform: platform, possible values are source, macos and windows currently.

  • path: the path to the packages within the base URL, for a given platform and R version.

  • r_version: R version, one of the specified R versions.

  • ok: Logical flag, whether the repository contains a metadata file for the given platform and R version.

  • ping: HTTP response time of the repository in seconds. If the ok column is FALSE, then this columns in NA.

  • error: the error object if the HTTP query failed for this repository, platform and R version.

Examples

repo_status()
#> # A data frame: 10 × 10                                                 
#>    name     url   type  bioc_…¹ platf…² path  r_ver…³ ok     ping error 
#>    <chr>    <chr> <chr> <chr>   <chr>   <chr> <chr>   <lgl> <dbl> <list>
#>  1 CRAN     http… cran  NA      source  src/… 4.2     TRUE  0.269 <NULL>
#>  2 CRAN     http… cran  NA      aarch6… bin/… 4.2     TRUE  0.265 <NULL>
#>  3 BioCsoft http… bioc  3.16    source  src/… 4.2     TRUE  0.264 <NULL>
#>  4 BioCsoft http… bioc  3.16    aarch6… bin/… 4.2     TRUE  0.271 <NULL>
#>  5 BioCann  http… bioc  3.16    source  src/… 4.2     TRUE  0.383 <NULL>
#>  6 BioCann  http… bioc  3.16    aarch6… bin/… 4.2     TRUE  0.392 <NULL>
#>  7 BioCexp  http… bioc  3.16    source  src/… 4.2     TRUE  0.507 <NULL>
#>  8 BioCexp  http… bioc  3.16    aarch6… bin/… 4.2     TRUE  0.739 <NULL>
#>  9 BioCwor… http… bioc  3.16    source  src/… 4.2     TRUE  0.505 <NULL>
#> 10 BioCwor… http… bioc  3.16    aarch6… bin/… 4.2     TRUE  0.766 <NULL>
#> # … with abbreviated variable names ¹​bioc_version, ²​platform,         
#> #   ³​r_version                                                         
repo_status(
  platforms = c("windows", "macos"),
  r_version = c("4.0", "4.1")
)
#> # A data frame: 15 × 10                                                 
#>    name          url    type  bioc_…¹ platf…² r_ver…³ path  ok      ping
#>    <chr>         <chr>  <chr> <chr>   <chr>   <chr>   <chr> <lgl>  <dbl>
#>  1 CRAN          https… cran  NA      i386+x… 4.0     bin/… TRUE   0.198
#>  2 CRAN          https… cran  NA      i386+x… 4.1     bin/… TRUE   0.197
#>  3 CRAN          https… cran  NA      aarch6… 4.1     bin/… TRUE   0.197
#>  4 BioCsoft      https… bioc  3.12    i386+x… 4.0     bin/… TRUE   0.988
#>  5 BioCann       https… bioc  3.12    i386+x… 4.0     bin/… TRUE   1.03 
#>  6 BioCexp       https… bioc  3.12    i386+x… 4.0     bin/… TRUE   1.25 
#>  7 BioCworkflows https… bioc  3.12    i386+x… 4.0     bin/… TRUE   1.47 
#>  8 BioCsoft      https… bioc  3.14    i386+x… 4.1     bin/… TRUE   1.48 
#>  9 BioCsoft      https… bioc  3.14    aarch6… 4.1     bin/… FALSE NA    
#> 10 BioCann       https… bioc  3.14    i386+x… 4.1     bin/… TRUE   1.45 
#> 11 BioCann       https… bioc  3.14    aarch6… 4.1     bin/… FALSE NA    
#> 12 BioCexp       https… bioc  3.14    i386+x… 4.1     bin/… TRUE   1.72 
#> 13 BioCexp       https… bioc  3.14    aarch6… 4.1     bin/… FALSE NA    
#> 14 BioCworkflows https… bioc  3.14    i386+x… 4.1     bin/… TRUE   1.71 
#> 15 BioCworkflows https… bioc  3.14    aarch6… 4.1     bin/… FALSE NA    
#> # … with 1 more variable: error <list>, and abbreviated variable names  
#> #   ¹​bioc_version, ²​platform, ³​r_version                             
repo_ping()
#> Repository summary:                   source aarch64-apple-darwin20          
#> CRAN          @ cloud.r-project.org       (194ms)
#> BioCsoft      @ bioconductor.org          (352ms)
#> BioCann       @ bioconductor.org          (511ms)
#> BioCexp       @ bioconductor.org          (675ms)
#> BioCworkflows @ bioconductor.org          (698ms)

See Also

Other repository functions: repo_add(), repo_get()


Check if installed packages have all their system requirements

Description

sysreqs_check_installed() checks if the system requirements of all packages (or a subset of packages) are installed.

sysreqs_fix_installed() installs the missing system packages.

Usage

sysreqs_check_installed(packages = NULL, library = .libPaths()[1])
sysreqs_fix_installed(packages = NULL, library = .libPaths()[1])

Arguments

packages

If not NULL, then only these packages are checked. If a package in packages is not installed, then pak throws a warning.

library

Library or libraries to check.

Details

These functions use the sysreqs_platform configuration option, see Configuration. Set this if pak does not detect your platform correctly.

Value

Data frame with a custom print and format method, and a pkg_sysreqs_check_result class. Its columns are:

  • system_package: string, name of the required system package.

  • installed: logical, whether the system package is correctly installed.

  • packages: list column of character vectors. The names of the installed R packages that need this system package.

  • pre_install: list column of character vectors. Commands to run before the installation of the the system package.

  • post_install: list column of character vectors. Commands to run after the installation of the system package.

The data frame also have two attributes with additional data:

  • sysreqs_records: the raw system requirements records, and

  • system_packages: the list of the installed system packages.

sysreqs_fix_packages() returns the same value, but invisibly.

See Also

Other system requirements functions: pkg_sysreqs(), sysreqs_db_list(), sysreqs_db_match(), sysreqs_db_update(), sysreqs_is_supported(), sysreqs_list_system_packages(), sysreqs_platforms()

Examples

# This only works on supported platforms
sysreqs_check_installed()

List contents of the system requirements DB, for a platform

Description

It also tries to update the system dependency database, if it is outdated. (I.e. older than allowed in the metadata_update_after configuration option.

Usage

sysreqs_db_list(sysreqs_platform = NULL)

Arguments

sysreqs_platform

System requirements platform. If NULL, then the sysreqs_platform configuration option is used, which defaults to the current platform. Set this option if pak does not detect your platform correctly.

Value

Data frame with columns:

  • name: cross platform system dependency name in the database.

  • patterns: one or more regular expressions to match to SystemRequirements fields.

  • packages: one or more system package names to install.

  • pre_install: command(s) to run before installing the packages.

  • post_install:: command(s) to run after installing the packages.

See Also

Other system requirements functions: pkg_sysreqs(), sysreqs_check_installed(), sysreqs_db_match(), sysreqs_db_update(), sysreqs_is_supported(), sysreqs_list_system_packages(), sysreqs_platforms()

Examples

sysreqs_db_list(sysreqs_platform = "ubuntu-22.04")

Match system requirement descriptions to the database

Description

In the usual workflow pak matches the SystemRequirements fields of the DESCRIPTION files to the database.

Usage

sysreqs_db_match(specs, sysreqs_platform = NULL)

Arguments

specs

Character vector of system requirements descriptions.

sysreqs_platform

System requirements platform. If NULL, then the sysreqs_platform configuration option is used, which defaults to the current platform. Set this option if pak does not detect your platform correctly.

Details

The sysreqs_db_match() function lets you match any string, and it is mainly useful for debugging.

Value

Data frame with columns:

  • spec: the input specs.

  • sysreq: name of the system library or tool.

  • packages: system packages, list column of character vectors. Rarely it can be an empty string, e.g. if a pre_install script performs the installation.

  • pre_install: list column of character vectors. Shell script(s) to run before the installation.

  • post_install: list column of character vectors. Shell script(s) to run after the installation.

See Also

Other system requirements functions: pkg_sysreqs(), sysreqs_check_installed(), sysreqs_db_list(), sysreqs_db_update(), sysreqs_is_supported(), sysreqs_list_system_packages(), sysreqs_platforms()

Examples

sysreqs_db_match(
  c("Needs libcurl", "Java, libssl"),
  sysreqs_platform = "ubuntu-22.04"
)

Update the cached copy of the system requirements database

Description

Update the cached copy of the system requirements database

Usage

sysreqs_db_update()

Details

If the the cached copy is recent, then no update is attempted. See the metadata_update_after configuration option.

See Also

Other system requirements functions: pkg_sysreqs(), sysreqs_check_installed(), sysreqs_db_list(), sysreqs_db_match(), sysreqs_is_supported(), sysreqs_list_system_packages(), sysreqs_platforms()


Check if a platform has system requirements support

Description

Check if a platform has system requirements support

Usage

sysreqs_is_supported(sysreqs_platform = NULL)

Arguments

sysreqs_platform

System requirements platform. If NULL, then the sysreqs_platform configuration option is used, which defaults to the current platform. Set this option if pak does not detect your platform correctly.

Value

Logical scalar.

See Also

The sysreqs_platform configuration option.

Other system requirements functions: pkg_sysreqs(), sysreqs_check_installed(), sysreqs_db_list(), sysreqs_db_match(), sysreqs_db_update(), sysreqs_list_system_packages(), sysreqs_platforms()

Examples

sysreqs_is_supported()

List installed system packages

Description

List installed system packages

Usage

sysreqs_list_system_packages()

Details

This function uses the sysreqs_platform configuration option, see Configuration. Set this if pak does not detect your platform correctly.

Value

Data frame with columns:

  • status. two or three characters, the notation of dpkg on Debian based systems. "ii" means the package is correctly installed. On RPM based systems it is always "ii" currently.

  • package: name of the system package.

  • version: installed version of the system package.

  • capabilities: list column of character vectors, the capabilities provided by the package.

See Also

Other system requirements functions: pkg_sysreqs(), sysreqs_check_installed(), sysreqs_db_list(), sysreqs_db_match(), sysreqs_db_update(), sysreqs_is_supported(), sysreqs_platforms()

Examples

sysreqs_list_system_packages()[1:10,]

List platforms with system requirements support

Description

List platforms with system requirements support

Usage

sysreqs_platforms()

Value

Data frame with columns:

  • name: human readable OS name.

  • os: OS name, e.g. linux.

  • distribution: OS id, e.g. ubuntu or redhat.

  • version: distribution version. A star means that all versions are supported, that are also supported by the vendor.

  • update_command: command to run to update the system package metadata.

  • install_command: command to run to install packages.

  • query_command: name of the tool to use to query system package information.

See Also

Other system requirements functions: pkg_sysreqs(), sysreqs_check_installed(), sysreqs_db_list(), sysreqs_db_match(), sysreqs_db_update(), sysreqs_is_supported(), sysreqs_list_system_packages()

Examples

sysreqs_platforms()

System requirements

Description

pak takes care of your system requirements.

Introduction

Many R packages need external software to be present on the machine, otherwise they do not work, or not even load. For example the RPostgres R package uses the PostgreSQL client library, and by default dynamically links to it on Linux systems. This means that you (or the administrators of your system) need to install this library, typically in the form of a system package: libpq-dev on Ubuntu and Debian systems, or postgresql-server-devel or postgresql-devel on RedHat, Fedora, etc. systems.

The good news is that pak helps you with this: - it looks up the required system packages when installing R packages, - it checks if the required system packages are installed, and - it installs them automatically, if you are a superuser, or you can use password-less sudo to start a superuser shell.

In addition, pak also has some functions to query system requirements and system packages.

Requirements, supported platforms

Call pak::sysreqs_platforms() to list all platforms that support system requirements:

pak::sysreqs_platforms()
## # A data frame: 10 × 7
##    name        os    distribution version update_command install_command
##    <chr>       <chr> <chr>        <chr>   <chr>          <chr>
##  1 Ubuntu Lin… linux ubuntu       *       apt-get -y up… apt-get -y ins…
##  2 Debian Lin… linux debian       *       apt-get -y up… apt-get -y ins…
##  3 CentOS Lin… linux centos       *       NA             yum install -y
##  4 Rocky Linux linux rockylinux   *       NA             dnf install -y
##  5 Red Hat En… linux redhat       6       NA             yum install -y
##  6 Red Hat En… linux redhat       7       NA             yum install -y
##  7 Red Hat En… linux redhat       *       NA             dnf install -y
##  8 Fedora Lin… linux fedora       *       NA             dnf install -y
##  9 openSUSE L… linux opensuse     *       NA             zypper --non-i…
## 10 SUSE Linux… linux sle          *       NA             zypper --non-i…
## # ℹ 1 more variable: query_command <chr>

Call pak::sysreqs_is_supported() to see if your system is supported:

pak::sysreqs_is_supported()
## [1] TRUE

This vignette was built on Ubuntu 22.04.2 LTS, which is a platform pak does support. So in the following you will see the output of the code.

R package installation

If you are using pak as a superuser, on a supported platform, then pak will look up system requirements, and install the missing ones. Here is an example:

pak::pkg_install("RPostgres")
##  Loading metadata database ... done
##
## → Will install 17 packages.
## → All 17 packages (0 B) are cached.
## + DBI          1.1.3
## + RPostgres    1.4.5   +  libpq-dev
## + Rcpp         1.0.10
## + bit          4.0.5
## + bit64        4.0.5
## + blob         1.2.4
## + cli          3.6.1
## + generics     0.1.3
## + glue         1.6.2
## + hms          1.1.3
## + lifecycle    1.0.3
## + lubridate    1.9.2
## + pkgconfig    2.0.3
## + rlang        1.1.1
## + timechange   0.2.0
## + vctrs        0.6.2
## + withr        2.5.0
## → Will install 1 system package:
## + libpq-dev  - RPostgres
##  No downloads are needed, 17 pkgs are cached
##  Installing system requirements
##  Executing `sh -c apt-get -y update`
##  Executing `sh -c apt-get -y install libpq-dev`
##  Installed DBI 1.1.3  (1.1s)
##  Installed RPostgres 1.4.5  (1.2s)
##  Installed Rcpp 1.0.10  (1.2s)
##  Installed bit 4.0.5  (1.2s)
##  Installed bit64 4.0.5  (148ms)
##  Installed blob 1.2.4  (63ms)
##  Installed cli 3.6.1  (88ms)
##  Installed generics 0.1.3  (61ms)
##  Installed glue 1.6.2  (63ms)
##  Installed hms 1.1.3  (62ms)
##  Installed lifecycle 1.0.3  (61ms)
##  Installed lubridate 1.9.2  (87ms)
##  Installed pkgconfig 2.0.3  (62ms)
##  Installed rlang 1.1.1  (1.1s)
##  Installed timechange 0.2.0  (1.1s)
##  Installed vctrs 0.6.2  (1.1s)
##  Installed withr 2.5.0  (1.1s)
##  1 pkg + 16 deps: added 17 [17.5s]

Running R as a regular user

If you don’t want to use R as the superuser, but you can set up sudo without a password, that works as well. pak will automatically detect the password-less sudo capability, and use it to install system packages, as needed.

If you run R as a regular (not root) user, and password-less sudo is not available, then pak will print the system requirements, but it will not try to install or update them. If you are installing source packages that need to link to system libraries, then their installation will probably fail, until you install these system packages. If you are installing binary R packages, then the installation typically succeeds, but you won’t be able to load these packages into R, until you install the required system packages. Here is an example, on a system that does not have the required system package installed for RPostgres. If you are installing a source R package, the installation already fails:

pak::pkg_install("RPostgres?source")
## + plogr       0.2.0
##  Missing 1 system package. You'll probably need to install it
## manually:
## + libpq-dev  - RPostgres
##  No downloads are needed, 2 pkgs (1.47 MB) are cached
##  Installed plogr 0.2.0  (1.1s)
##  Building RPostgres 1.4.5
##  Failed to build RPostgres 1.4.5
## Registered S3 methods overwritten by 'callr':
##   method                    from
##   format.callr_status_error
##   print.callr_status_error
## Error:
## ! error in pak subprocess
## Caused by error in `stop_task_build(state, worker)`:
## ! Failed to build source package 'RPostgres'
## Full installation output:
## * installing *source* package ‘RPostgres’ ...
## ** package ‘RPostgres’ successfully unpacked and MD5 sums checked
## staged installation is only possible with locking
## ** using non-staged installation
## Using PKG_CFLAGS=
## Using PKG_LIBS=-lpq
## Using PKG_PLOGR=
## ------------------------- ANTICONF ERROR ---------------------------
## Configuration failed because libpq was not found. Try installing:
##  * deb: libpq-dev libssl-dev (Debian, Ubuntu, etc)
##  * rpm: postgresql-devel (Fedora, EPEL)
##  * rpm: postgreql8-devel, psstgresql92-devel, postgresql93-devel, or pos
## tgresql94-devel (Amazon Linux)
##  * csw: postgresql_dev (Solaris)
##  * brew: libpq (OSX)
## If libpq is already installed, check that either:
## (i)  'pkg-config' is in your PATH AND PKG_CONFIG_PATH contains
##      a libpq.pc file; or
## (ii) 'pg_config' is in your PATH.
## If neither can detect , you can set INCLUDE_DIR
## and LIB_DIR manually via:
## R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'
## --------------------------[ ERROR MESSAGE ]----------------------------
## <stdin>:1:10: fatal error: libpq-fe.h: No such file or directory
## compilation terminated.
## -----------------------------------------------------------------------
## ERROR: configuration failed for package ‘RPostgres’
## * removing ‘/tmp/RtmpsOXbPZ/pkg-lib4a492949a49e/RPostgres’
## ---
## Backtrace:
## 1. pak::pkg_install("RPostgres?source")
## 2. pak:::remote(function(...) get("pkg_install_do_plan", asNamespace("pa
## k")… at package.R:84:3
## 3. err$throw(res$error) at subprocess.R:115:5
## ---
## Subprocess backtrace:
##  1. base::withCallingHandlers(cli_message = function(msg) { …
##  2. get("pkg_install_do_plan", asNamespace("pak"))(...)
##  3. proposal$install()
##  4. pkgdepends::install_package_plan(plan, lib = private$library, num_wo
## rkers = nw…
##  5. base::withCallingHandlers({ …
##  6. pkgdepends:::handle_events(state, events)
##  7. pkgdepends:::handle_event(state, i)
##  8. pkgdepends:::stop_task(state, worker)
##  9. pkgdepends:::stop_task_build(state, worker)
## 10. base::throw(new_pkg_build_error("Failed to build source package {pkg
## }", …                                                                   
## 11. | base::signalCondition(cond)                                       
## 12. global (function (e) …                                              
## Execution halted                                                        

On the other hand, if you are installing binary packages, e.g. from the Posit Package Manager, then the installation typically succeeds, but then loading the package fails:

pak::pkg_install("RPostgres")
library(RPostgres)
## → Will install 17 packages.
## → All 17 packages (0 B) are cached.
## + DBI          1.1.3
## + RPostgres    1.4.5   +  libpq-dev
## + Rcpp         1.0.10
## + bit          4.0.5
## + bit64        4.0.5
## + blob         1.2.4
## + cli          3.6.1
## + generics     0.1.3
## + glue         1.6.2
## + hms          1.1.3
## + lifecycle    1.0.3
## + lubridate    1.9.2
## + pkgconfig    2.0.3
## + rlang        1.1.1
## + timechange   0.2.0
## + vctrs        0.6.2
## + withr        2.5.0
##  Missing 1 system package. You'll probably need to install it
## manually:
## + libpq-dev  - RPostgres
##  No downloads are needed, 17 pkgs are cached
##  Installed DBI 1.1.3  (1.1s)
##  Installed RPostgres 1.4.5  (1.1s)
##  Installed Rcpp 1.0.10  (1.2s)
##  Installed bit 4.0.5  (1.2s)
##  Installed bit64 4.0.5  (144ms)
##  Installed blob 1.2.4  (1.1s)
##  Installed cli 3.6.1  (1.1s)
##  Installed generics 0.1.3  (90ms)
##  Installed glue 1.6.2  (87ms)
##  Installed hms 1.1.3  (1.1s)
##  Installed lifecycle 1.0.3  (1.1s)
##  Installed lubridate 1.9.2  (1.1s)
##  Installed pkgconfig 2.0.3  (1.1s)
##  Installed rlang 1.1.1  (1.1s)
##  Installed timechange 0.2.0  (1.1s)
##  Installed vctrs 0.6.2  (1.1s)
##  Installed withr 2.5.0  (1.1s)
##  1 pkg + 16 deps: added 17 [11.6s]
## Error: package or namespace load failed for ‘RPostgres’ in dyn.load(file
## , DLLpath = DLLpath, ...):
##  unable to load shared object '/tmp/RtmpWqZycA/lib/RPostgres/libs/RPostg
## res.so':
##   libpq.so.5: cannot open shared object file: No such file or directory
## Execution halted

Query system requirements without installation

If you only want to query system requirements, without installing any packages, use the pkg_sysreqs() function. This is similar to pkg_deps() but in addition to looking up package dependencies, it also looks up system dependencies, and only reports the latter:

pak::pkg_sysreqs(c("curl", "xml2", "devtools", "CHRONOS"))
##  Loading metadata database ... done
## ── Install scripts ───────────────────────────────────── Ubuntu 22.04 ──
## apt-get -y update
## apt-get -y install libcurl4-openssl-dev libssl-dev libxml2-dev git make
##   libgit2-dev zlib1g-dev pandoc libfreetype6-dev libjpeg-dev libpng-dev
##   libtiff-dev libicu-dev libfontconfig1-dev libfribidi-dev
##   libharfbuzz-dev libglpk-dev libgmp3-dev default-jdk
## R CMD javareconf
## R CMD javareconf
##
## ── Packages and their system dependencies ──────────────────────────────
## CHRONOS     – default-jdk, pandoc
## credentials – git
## curl        – libcurl4-openssl-dev, libssl-dev
## fs          – make
## gert        – libgit2-dev
## gitcreds    – git
## httpuv      – make, zlib1g-dev
## igraph      – libglpk-dev, libgmp3-dev, libxml2-dev
## knitr       – pandoc
## openssl     – libssl-dev
## pkgdown     – pandoc
## png         – libpng-dev
## ragg        – libfreetype6-dev, libjpeg-dev, libpng-dev, libtiff-dev
## RCurl       – libcurl4-openssl-dev, make
## remotes     – git
## rJava       – default-jdk, make
## rmarkdown   – pandoc
## sass        – make
## stringi     – libicu-dev
## systemfonts – libfontconfig1-dev, libfreetype6-dev
## textshaping – libfreetype6-dev, libfribidi-dev, libharfbuzz-dev
## XML         – libxml2-dev
## xml2        – libxml2-dev

See the manual of pkg_sysreqs() to see how to programmatically extract information from its return value.

Other queries

In addition to the automatic system package lookup and installation, pak also has some other functions to help you with system dependencies. The sysreqs_db_list() function lists all system requirements pak knows about.

pak::sysreqs_db_list()
## # A data frame: 106 × 5
##    name       patterns  packages  pre_install post_install
##    <chr>      <list>    <list>    <list>      <list>
##  1 QuantLib   <chr [1]> <chr [1]> <NULL>      <NULL>
##  2 apparmor   <chr [2]> <chr [1]> <NULL>      <NULL>
##  3 atk        <chr [1]> <chr [1]> <NULL>      <NULL>
##  4 automake   <chr [1]> <chr [1]> <NULL>      <NULL>
##  5 berkeleydb <chr [2]> <chr [1]> <NULL>      <NULL>
##  6 blender    <chr [1]> <chr [1]> <NULL>      <NULL>
##  7 bowtie2    <chr [1]> <chr [1]> <NULL>      <NULL>
##  8 bwidget    <chr [1]> <chr [1]> <NULL>      <NULL>
##  9 cairo      <chr [1]> <chr [1]> <NULL>      <NULL>
## 10 chrome     <chr [1]> <NULL>    <chr [3]>   <chr [1]>
## # ℹ 96 more rows

sysreqs_db_match() manually matches SystemRequirements fields againts these system requirements:

sq <- pak::sysreqs_db_match("Needs libcurl and also Java.")
sq
## [[1]]
## # A data frame: 2 × 5
##   spec                         sysreq  packages pre_install post_install
##   <chr>                        <chr>   <list>   <list>      <list>
## 1 Needs libcurl and also Java. java    <chr>    <NULL>      <chr [1]>
## 2 Needs libcurl and also Java. libcurl <chr>    <NULL>      <NULL>
##
sq[[1]]$packages
## [[1]]
## [1] "default-jdk"
##
## [[2]]
## [1] "libcurl4-openssl-dev"
##

You can also use it to query system requirements for other platfosm:

sqrhel9 <- pak::sysreqs_db_match("Needs libcurl and also Java.", "redhat-9")
sqrhel9
## [[1]]
## # A data frame: 2 × 5
##   spec                         sysreq  packages pre_install post_install
##   <chr>                        <chr>   <list>   <list>      <list>
## 1 Needs libcurl and also Java. java    <chr>    <NULL>      <chr [1]>
## 2 Needs libcurl and also Java. libcurl <chr>    <NULL>      <NULL>
##
sqrhel9[[1]]$packages
## [[1]]
## [1] "java-11-openjdk-devel"
##
## [[2]]
## [1] "libcurl-devel"
##

sysreqs_list_system_packages() is a cross-platform way of listing all installed system packages and capabilities:

pak::sysreqs_list_system_packages()
## # A data frame: 433 × 4
##    status package         version         provides
##    <chr>  <chr>           <chr>           <list>
##  1 ii     adduser         3.118ubuntu5    <chr [0]>
##  2 ii     apt             2.4.8           <chr [1]>
##  3 ii     autoconf        2.71-2          <chr [0]>
##  4 ii     automake        1:1.16.5-1.3    <chr [2]>
##  5 ii     autotools-dev   20220109.1      <chr [0]>
##  6 ii     base-files      12ubuntu4.3     <chr [1]>
##  7 ii     base-passwd     3.5.52build1    <chr [0]>
##  8 ii     bash            5.1-6ubuntu1    <chr [0]>
##  9 ii     binutils        2.38-4ubuntu2.1 <chr [2]>
## 10 ii     binutils-common 2.38-4ubuntu2.1 <chr [0]>
## # ℹ 423 more rows

sysreqs_check_installed() is a handy function that checks if all system requirements are installed for some or all R packages that are installed in your library:

pak::sysreqs_check_installed()
## system package       installed required by
## --------------       --        -----------
## git                           gitcreds
## gsfonts                       magick
## imagemagick                   magick
## libarchive-dev                archive
## libcurl4-openssl-dev          curl
## libfontconfig1-dev            systemfonts
## libfreetype6-dev              ragg, systemfonts, textshaping
## libfribidi-dev                textshaping
## libharfbuzz-dev               textshaping
## libicu-dev                    stringi
## libjpeg-dev                   ragg
## libmagick++-dev               magick
## libnode-dev                   V8
## libpng-dev                    ragg
## libpq-dev                     RPostgres
## libssl-dev                    curl, openssl
## libtiff-dev                   ragg
## libxml2-dev                   xml2
## make                          fs, sass
## pandoc                        knitr, rmarkdown
## zlib1g-dev                    data.table

sysreqs_fix_installed() goes one step further and also tries to install the missing system requirements.

Build-time and run-time dependencies

The system requirements database that pak uses does not currently differentiate between build-time and run-time dependencies. A build-time dependency is a system package that you need when installing an R package from source. A run-time dependency is a system package that you need when using an R package. Most Linux distribution create (at least) two packages for each software library: a runtime package and a development package. For an R package that uses such a software library, the runtime package is a run-time dependency and the development package is a build-time dependency. However, pak does not currently know the difference between build-time and run-time dependencies, and it will install both types of dependencies, always. This means that pak usually installs system packages that are not strictly necessary. These are typically development packages of libraries, i.e. header files, and typically do not cause any issues. If you are short on disk space, then you can try removing them.

How it works

pak uses the database of system requirements at https://github.com/rstudio/r-system-requirements. It has its own copy of the database embedded into the package, and it also tries to download updated versions of the database from GitHub, if its current copy is older than one day. You can explicitly update the database from GitHub using the sysreqs_db_update() function.

For CRAN packages, it downloads the SystemRequirements fields from ⁠https://cran.r-pkg.org/metadata⁠, which is a database updated daily. For Bioconductor packages, it downloads then from GitHub. (We are planning on moving CRAN database to GitHub as well.)

For packages sources that require pak to obtain a package DESCRIPTION file (e.g. ⁠github::⁠, ⁠git::⁠, etc.), pak obtains SystemRequirements directly from the DESCRIPTION file.

Once having the SystemRequirements fields, pak matches them to the database, to obtain the cacnonized list of system requirements.

Then pak queries the local platform, to see the exact system packages needed. It also queries the installed system packages, to avoid trying to install system packages that are already installed.

Configuration

There are several pak configuration options you can use to adjust how system requirements are handled. We will list some of them here, please see the options with a sysreqs prefix in the ?pak-config manual page for a complete and current list.

  • sysreqs: whether to install system requirements. The default is TRUE if the platform is supported and the user can install system packages, either because it is the superuser, or via sudo. If it is FALSE (or the user cannot install system packages), but the platform is supported, system requirements are printed, but not installed.

  • sysreqs_db_update: whether to try to update the system requirements database from GitHub.

  • sysreqs_db_update_timeout: timeout for the system requirements update from GitHub.

  • sysreqs_dry_run: if TRUE then pak only prints the install commands, but does not actually run them.

  • sysreqs_platform: the platform name to use for determining system requirements. Defaults to the current platform. If you are using a Linux distribution that is compatible with some distribution that pak supports, then you can set this option manually. E.g. Ubuntu-based distros can set it to ubuntu-22.04, or the appropriate Ubuntu version.

  • sysreqs_sudo: whether to use sudo to install system packages. If this is not set, then pak tries to auto-detect if sudo is needed or not.

  • sysreqs_update: whether to try to update system packages that are already installed. pak does not know which version of a system package is required, and it does not try to update system packages by default. If you think that you need newer system packages, then you can set this option to TRUE.

  • sysreqs_verbose: whether to print the output of the system package installation commands. Useful for debugging, and it is TRUE by default in a CI environment.

About other OSes

Windows

While the system requirements database has some information about system dependencies on Windows, pak does not use this information and it does not try to install system software on Windows. CRAN, PPM and Bioconductor have Windows binary packages available for the majority of R packages they serve, and these packages practically always link to system libraries statically, so they don’t need any external software.

If you wish to compile Windows packages from source, then you need to install the appropriate version of Rtools, and possibly extra packages using the pacman tool of Rtools4x.

Rtools42 and newer Rtools versions bundle lots of libraries, so most likely no extra pacman packages are needed. Rtools40 has a leaner default installation, and you’ll probably need to install packages manually: https://github.com/r-windows/docs/blob/master/rtools40.md#readme

We are planning on adding better Windows system software support to pak in the future.

macOS

pak does not currently have system requirement information for macOS. macOS is similar to Windows, in that most repositories will serve statically linked macOS binary packages that do not need system software.

If you do need to compile packages from source, then you possibly need to install some sytem libraries, either via Homebrew, or by downloading CRAN’s static library builds from https://mac.r-project.org/bin/

We are planning on adding better macOS system software support to pak in the future.


R platforms

Description

R platforms

Usage

system_r_platform()

system_r_platform_data()

Details

system_r_platform() detects the platform of the current R version. system_r_platform_data() is similar, but returns the raw data instead of a character scalar.

By default pak works with source packages and binary packages for the current platform. You can change this, by providing different platform names in the pkg.platforms option or the PKG_PLATFORMS environment variable.

This option may contain the following platform names:

  • "source" for source packages,

  • "macos" for macOS binaries that are appropriate for the R versions pak is working with. Packages for incompatible CPU architectures are dropped (defaulting to the CPU of the current macOS machine and x86_64 on non-macOS systems). The macOS Darwin version is selected based on the CRAN macOS binaries. E.g. on R 3.5.0 macOS binaries are built for macOS El Capitan.

  • "windows" for Windows binaries for the default CRAN architecture. This is currently Windows Vista for all supported R versions, but it might change in the future. The actual binary packages in the repository might support both 32 bit and 64 builds, or only one of them. In practice 32-bit only packages are very rare. CRAN builds before and including R 4.1 have both architectures, from R 4.2 they are 64 bit only. "windows" is an alias to i386+x86_64-w64-mingw32 currently.

  • A platform string like R.version$platform, but on Linux the name and version of the distribution are also included. Examples:

    • x86_64-apple-darwin17.0: macOS High Sierra.

    • aarch64-apple-darwin20: macOS Big Sur on arm64.

    • x86_64-w64-mingw32: 64 bit Windows.

    • i386-w64-mingw32: 32 bit Windows.

    • i386+x86_64-w64-mingw32: 64 bit + 32 bit Windows.

    • i386-pc-solaris2.10: 32 bit Solaris. (Some broken 64 Solaris builds might have the same platform string, unfortunately.)

    • x86_64-pc-linux-gnu-debian-10: Debian Linux 10 on x86_64.

    • ⁠x86_64-pc-linux-musl-alpine-3.14.1⁠: Alpine Linux.

    • x86_64-pc-linux-gnu-unknown: Unknown Linux Distribution on x86_64.

    • s390x-ibm-linux-gnu-ubuntu-20.04: Ubuntu Linux 20.04 on S390x.

    • amd64-portbld-freebsd12.1: FreeBSD 12.1 on x86_64.

Value

system_r_platform() returns a character scalar.

system_r_platform_data() returns a data frame with character scalar columns:

  • cpu,

  • vendor,

  • os,

  • distribution (only on Linux),

  • release (only on Linux),

  • platform: the concatenation of the other columns, separated by a dash.

See Also

These function call pkgcache::current_r_platform() and pkgcache::current_r_platform_data().

Examples

system_r_platform()
system_r_platform_data()

Find the ideal set of packages and versions to install

Description

pak contains a package dependency solver, that makes sure that the package source and version requirements of all packages are satisfied, before starting an installation. For CRAN and BioC packages this is usually automatic, because these repositories are generally in a consistent state. If packages depend on other other package sources, however, this is not the case.

Details

Here is an example of a conflict detected:

> pak::pkg_install(c("r-lib/pkgcache@conflict", "r-lib/cli@message"))
Error: Cannot install packages:
  * Cannot install `r-lib/pkgcache@conflict`.
    - Cannot install dependency r-lib/cli@main
  * Cannot install `r-lib/cli@main`.
- Conflicts r-lib/cli@message

r-lib/pkgcache@conflict depends on the main branch of r-lib/cli, whereas, we explicitly requested the message branch. Since it cannot install both versions into a single library, pak quits.

When pak considers a package for installation, and the package is given with its name only, (e.g. as a dependency of another package), then the package may have any package source. This is necessary, because one R package library may contain only at most one version of a package with a given name.

pak's behavior is best explained via an example. Assume that you are installing a local package (see below), e.g. local::., and the local package depends on pkgA and user/pkgB, the latter being a package from GitHub (see below), and that pkgA also depends on pkgB. Now pak must install pkgB and user/pkgB. In this case pak interprets pkgB as a package from any package source, instead of a standard package, so installing user/pkgB satisfies both requirements.

Note that that cran::pkgB and user/pkgB requirements result a conflict that pak cannot resolve. This is because the first one must be a CRAN package, and the second one must be a GitHub package, and two different packages with the same cannot be installed into an R package library.