The oeli package offers a collection of handy functions that I found useful while developing R packages. Perhaps you’ll find them helpful too!
Demos
The package includes helpers for various tasks and objects. Some demos are shown below. Click the headings for reference pages with documentation on all available helpers in each category.
Distributions
The package has density and sampling functions for distributions not in base R, such as Dirichlet, multivariate normal, truncated normal, and Wishart.
ddirichlet(x = c(0.2, 0.3, 0.5), concentration = 1:3)
#> [1] 4.5
rdirichlet(concentration = 1:3)
#> [1] 0.1273171 0.5269401 0.3457428
For faster computation, Rcpp implementations are also available:
Function helpers
Retrieving default arguments of a function
:
f <- function(a, b = 1, c = "", ...) { }
function_defaults(f)
#> $b
#> [1] 1
#>
#> $c
#> [1] ""
Indexing helpers
Create all possible permutations of vector elements:
permutations(LETTERS[1:3])
#> [[1]]
#> [1] "A" "B" "C"
#>
#> [[2]]
#> [1] "A" "C" "B"
#>
#> [[3]]
#> [1] "B" "A" "C"
#>
#> [[4]]
#> [1] "B" "C" "A"
#>
#> [[5]]
#> [1] "C" "A" "B"
#>
#> [[6]]
#> [1] "C" "B" "A"
Package helpers
Quickly have a basic logo for your new package:
package_logo("my_package", brackets = TRUE, use_logo = FALSE)
How to print a matrix
without filling up the entire console?
x <- matrix(rnorm(10000), ncol = 100, nrow = 100)
print_matrix(x, rowdots = 4, coldots = 4, digits = 2, label = "what a big matrix")
#> what a big matrix : 100 x 100 matrix of doubles
#> [,1] [,2] [,3] ... [,100]
#> [1,] 2.39 0.3 -0.48 ... 0.56
#> [2,] -1.33 0.62 0.37 ... -1.21
#> [3,] -0.03 -0.43 1.71 ... 0.07
#> ... ... ... ... ... ...
#> [100,] 0.14 -0.16 2.49 ... -1.58
And what about a data.frame
?
x <- data.frame(x = rnorm(1000), y = LETTERS[1:10])
print_data.frame(x, rows = 7, digits = 0)
#> x y
#> 1 0 A
#> 2 -1 B
#> 3 0 C
#> 4 -1 D
#> < 993 rows hidden >
#>
#> 998 -1 H
#> 999 -1 I
#> 1000 0 J
Simulation helpers
Let’s simulate a Markov chain:
Gamma <- sample_transition_probability_matrix(dim = 3)
simulate_markov_chain(Gamma = Gamma, T = 20)
#> [1] 2 1 1 3 1 1 2 2 3 2 2 2 2 2 1 1 1 1 1 3
Transformation helpers
The group_data.frame()
function groups a given data.frame
based on the values in a specified column:
df <- data.frame("label" = c("A", "B"), "number" = 1:10)
group_data.frame(df = df, by = "label")
#> $A
#> label number
#> 1 A 1
#> 3 A 3
#> 5 A 5
#> 7 A 7
#> 9 A 9
#>
#> $B
#> label number
#> 2 B 2
#> 4 B 4
#> 6 B 6
#> 8 B 8
#> 10 B 10
Validation helpers
Is my matrix a proper transition probability matrix?
matrix <- diag(4)
matrix[1, 2] <- 1
check_transition_probability_matrix(matrix)
#> [1] "Must have row sums equal to 1"