/versionr

Primary LanguageROtherNOASSERTION

{versionr} Package

{versionr} is a lightweight package designed to remove the friction of working with version numbers in R. The main benefit of versionr is the vctrs-powered S3 class version_number.

Installation

You can install the development version from GitHub with:

# install.packages("devtools")
devtools::install_github("wurli/versionr")

Create Version Numbers

Version numbers can be created using characters or numeric vectors, and can have arbitrary numbers of parts

library(versionr)

version_number("1.0.0", "1.0.1")
#> <version_number[2]>
#> [1] 1.0.0 1.0.1
version_number(c(1, 0, 0, 0), c(1, 0, 0, 1))
#> <version_number[2]>
#> [1] 1.0.0.0 1.0.0.1

Sorting

A main benefit of {versionr} is easy version comparison and sorting

nums <- version_number("1.0.0", "1.0.11", "1.0.2", "2.0.0.1")

# 1.0.11 should come after 1.0.2:
nums[2] > nums[3]
#> [1] TRUE

# Sorting is easy:
sort(nums)
#> <version_number[4]>
#> [1] 1.0.0   1.0.2   1.0.11  2.0.0.1

Bumping

Version numbers can be easily ‘bumped’ using bump_version():

bump_version(nums, "patch")
#> <version_number[4]>
#> [1] 1.0.1   1.0.12  1.0.3   2.0.1.0
bump_version(nums, "major")
#> <version_number[4]>
#> [1] 2.0.0   2.0.0   2.0.0   3.0.0.0

Accessing Version Parts

Version numbers are vectors, and you can easily access particular parts using version_part():

version_part(nums, "minor")
#> [1] 0 0 0 0
version_part(nums, "dev")
#> [1] NA NA NA  1

Implementation

Behind the scenes, version numbers are just vectors of integers wrapped in a list:

unclass(nums)
#> [[1]]
#> [1] 1 0 0
#> 
#> [[2]]
#> [1]  1  0 11
#> 
#> [[3]]
#> [1] 1 0 2
#> 
#> [[4]]
#> [1] 2 0 0 1
#> 
#> attr(,"ptype")
#> integer(0)

…This makes intuitive subsetting possible:

nums[[3]][4]
#> [1] NA