Type: | Package |
Title: | Sparse Tables |
Version: | 1.0.1 |
Date: | 2024-11-22 |
Description: | Fast Multiplication and Marginalization of Sparse Tables <doi:10.18637/jss.v111.i02>. |
Encoding: | UTF-8 |
License: | MIT + file LICENSE |
Imports: | Rcpp (≥ 1.0.5) |
LinkingTo: | Rcpp, RcppArmadillo |
ByteCompile: | Yes |
NeedsCompilation: | yes |
RoxygenNote: | 7.3.1 |
Suggests: | rmarkdown, knitr, tinytest |
URL: | https://github.com/mlindsk/sparta |
BugReports: | https://github.com/mlindsk/sparta/issues |
VignetteBuilder: | knitr |
Packaged: | 2024-11-22 12:01:02 UTC; mlindsk |
Author: | Mads Lindskou [aut, cre] |
Maintainer: | Mads Lindskou <madslindskou@gmail.com> |
Repository: | CRAN |
Date/Publication: | 2024-11-22 14:20:01 UTC |
sparta: Sparse Tables
Description
Fast Multiplication and Marginalization of Sparse Tables.
Author(s)
Maintainer: Mads Lindskou madslindskou@gmail.com
See Also
Useful links:
Classes that can be converted to sparta
Description
A non-argument function, that outputs the classes that can be converted to a sparta object
Usage
allowed_class_to_sparta()
As array
Description
Turn a sparse table into an array
Usage
as_array(x)
## S3 method for class 'sparta'
as_array(x)
## S3 method for class 'sparta_unity'
as_array(x)
Arguments
x |
sparta object |
Value
An array
See Also
Examples
x <- array(
c(1,0,0,2,3,4,0,0),
dim = c(2,2,2),
dimnames = list(
a = c("a1", "a2"),
b = c("b1", "b2"),
c = c("c1", "c2")
)
)
as_array(as_sparta(x))
As cpt
Description
Turn a sparta into a conditional probability table
Usage
as_cpt(x, y)
## S3 method for class 'sparta'
as_cpt(x, y)
Arguments
x |
sparta object |
y |
the conditioning variables |
Examples
x <- array(
c(1,0,0,2,3,4,0,0),
dim = c(2,2,2),
dimnames = list(
a = c("a1", "a2"),
b = c("b1", "b2"),
c = c("c1", "c2")
)
)
sx <- as_sparta(x)
# A joint probability table p(a, b, c)
as_cpt(sx, character(0))
# the same as normalize
normalize(sx)
# A conditional probability table p(a, c | b)
pacb <- as_cpt(sx, "b")
# The probability distribution when b = b1
slice(pacb, c(b = "b1"))
As data frame
Description
Turn a sparse table into a data frame
Usage
as_df(x, dense = FALSE)
## S3 method for class 'sparta'
as_df(x, dense = FALSE)
Arguments
x |
sparta object |
dense |
Logical indicating if zero cells should be present or not |
Value
A data frame
See Also
Examples
x <- array(
c(1,0,0,2,3,4,0,0),
dim = c(2,2,2),
dimnames = list(
a = c("a1", "a2"),
b = c("b1", "b2"),
c = c("c1", "c2")
)
)
as_df(as_sparta(x))
As sparse table
Description
Turn an array-like object or a data.frame into a sparse representation
Usage
as_sparta(x)
## S3 method for class 'array'
as_sparta(x)
## S3 method for class 'matrix'
as_sparta(x)
## S3 method for class 'table'
as_sparta(x)
## S3 method for class 'sparta'
as_sparta(x)
## S3 method for class 'data.frame'
as_sparta(x)
Arguments
x |
array-like object or a data.frame |
Value
A sparta object
References
<doi:10.18637/jss.v111.i02>
See Also
Examples
# ----------
# Example 1)
# ----------
x <- array(
c(1,0,0,2,3,4,0,0),
dim = c(2,2,2),
dimnames = list(
a = c("a1", "a2"),
b = c("b1", "b2"),
c = c("c1", "c2")
)
)
as_sparta(x)
# ----------
# Example 2)
# ----------
y <- mtcars[, c("gear", "carb")]
y[] <- lapply(y, as.character)
as_sparta(y)
Equiv
Description
Determine if two sparta objects are equivalent
Usage
equiv(x, y)
## S3 method for class 'sparta'
equiv(x, y)
Arguments
x |
sparta object |
y |
sparta object |
Value
Logical. TRUE
if x
and y
are equivalent
Examples
x <- array(
c(1,0,0,2,3,4,0,0),
dim = c(2,2,2),
dimnames = list(
a = c("a1", "a2"),
b = c("b1", "b2"),
c = c("c1", "c2")
)
)
y <- array(
c(2,0,0,2,3,4,0,0),
dim = c(2,2,2),
dimnames = list(
a = c("a1", "a2"),
b = c("b1", "b2"),
c = c("c1", "c2")
)
)
sx <- as_sparta(x)
sy <- as_sparta(y)
equiv(sx, sy)
equiv(sx, sx)
Get value or cell name
Description
Find the value or the name of a cell
Usage
get_val(x, y)
## S3 method for class 'sparta'
get_val(x, y)
get_cell_name(x, y)
## S3 method for class 'sparta'
get_cell_name(x, y)
Arguments
x |
sparta |
y |
named character vector or vector of cell indices |
Examples
x <- array(
c(1,0,0,2,3,4,0,0),
dim = c(2,2,2),
dimnames = list(
a = c("a1", "a2"),
b = c("b1", "b2"),
c = c("c1", "c2")
)
)
sx <- as_sparta(x)
get_val(sx, c(a = "a2", b = "b1", c = "c2"))
get_cell_name(sx, sx[, 4])
Marginalization of sparse tables
Description
Marginalize a sparse table given a vector of variables to marginalize out
Usage
marg(x, y, flow = "sum")
## S3 method for class 'sparta'
marg(x, y, flow = "sum")
## S3 method for class 'numeric'
marg(x, y, flow = "sum")
Arguments
x |
sparta object or a numeric. If numeric, the value is just returned. |
y |
character vector of the variables to marginalize out |
flow |
either "sum" or "max" |
Value
A sparta object (or scalar if all variables are summed out)
Examples
x <- array(
c(1,0,0,2,3,4,0,0),
dim = c(2,2,2),
dimnames = list(
a = c("a1", "a2"),
b = c("b1", "b2"),
c = c("c1", "c2")
)
)
sx <- as_sparta(x)
marg(sx, c("c"))
su <- sparta_unity_struct(dim_names(sx), rank = 3.14)
marg(su, c("a", "b"))
Multiplication and division of sparse tables
Description
Multiplication and division of sparse tables
Usage
mult(x, y)
## S3 method for class 'sparta'
mult(x, y)
## S3 method for class 'numeric'
mult(x, y)
div(x, y)
## S3 method for class 'sparta'
div(x, y)
## S3 method for class 'numeric'
div(x, y)
Arguments
x |
sparta object or scalar |
y |
sparta object or scalar |
Value
A sparta object or a scalar
References
<doi:10.18637/jss.v111.i02>
Examples
# ----------
# Example 1)
# ----------
x <- array(
c(1,0,0,2,3,4,0,0),
dim = c(2,2,2),
dimnames = list(
a = c("a1", "a2"),
b = c("b1", "b2"),
c = c("c1", "c2")
)
)
y <- array(
c(1,3,0,2,4,2,7,0,
1,8,0,1,6,2,1,0,
1,5,0,3,2,9,1,0),
dim = c(2,2,2, 3),
dimnames = list(
b = c("b1", "b2"),
d = c("d1", "d2"),
a = c("a1", "a2"),
e = c("e1", "e2", "e3")
)
)
sx <- as_sparta(x)
sy <- as_sparta(y)
sparsity(sx)
table_size(sx)
dim_names(sx)
names(sx)
mult(sx, sy)
div(sy, sx)
# ----------
# Example 2)
# ----------
d1 <- mtcars[, c("cyl", "vs", "am")]
d1[] <- lapply(d1, as.character)
d2 <- mtcars[, c("am", "gear", "carb")]
d2[] <- lapply(d2, as.character)
ds1 <- as_sparta(d1)
ds2 <- as_sparta(d2)
mult(ds1, ds2)
# ----------
# Example 3)
# ----------
su <- sparta_unity_struct(dim_names(sy), rank = 3.1415)
sparta_rank(su)
sum(su)
sun <- normalize(su)
sun
sum(sun)
mult(sx, sun)
# ----------
# Example 4)
# ----------
so <- sparta_ones(dim_names(sx))
mult(so, 2)
Normalize
Description
Normalize
Usage
normalize(x)
## S3 method for class 'sparta'
normalize(x)
## S3 method for class 'numeric'
normalize(x)
Arguments
x |
sparta |
Value
A sparta object
Examples
x <- array(
c(1,0,0,2,3,4,0,0),
dim = c(2,2,2),
dimnames = list(
a = c("a1", "a2"),
b = c("b1", "b2"),
c = c("c1", "c2")
)
)
sx <- as_sparta(x)
normalize(sx)
Description
Print method for sparta objects
Usage
## S3 method for class 'sparta'
print(x, ...)
Arguments
x |
sparta object |
... |
For S3 compatability. Not used. |
Slice
Description
Find the slice of a sparse table
Usage
slice(x, s, drop = FALSE)
## S3 method for class 'sparta'
slice(x, s, drop = FALSE)
Arguments
x |
sparta object |
s |
a slice in form of a named character vector |
drop |
Logical. If |
Value
A sparta object
Examples
x <- array(
c(1,0,0,2,3,4,0,0),
dim = c(2,2,2),
dimnames = list(
a = c("a1", "a2"),
b = c("b1", "b2"),
c = c("c1", "c2")
)
)
sx <- as_sparta(x)
# conditional probability table p(b,c|a)
sx <- as_cpt(sx, "a")
# the probability distriubtion when 'a' is 'a2'
sxa2 <- slice(sx, c(a = "a2"))
get_val(sxa2, c(a = "a2", b = "b1", c = "c2"))
sxa2_drop <- slice(sx, c(a = "a2"), drop = TRUE)
get_val(sxa2_drop, c(b = "b1", c = "c2"))
u <- sparta_unity_struct(dim_names(sx))
slice(u, c(a = "a1"), drop = TRUE)
Sparsity
Description
Sparsity
Usage
sparsity(x)
## S3 method for class 'sparta'
sparsity(x)
## S3 method for class 'sparta_unity'
sparsity(x)
Arguments
x |
sparta |
Value
The ratio of ncol(x)
and the total statespace of x
Examples
x <- array(
c(1,0,0,2,3,4,0,0),
dim = c(2,2,2),
dimnames = list(
a = c("a1", "a2"),
b = c("b1", "b2"),
c = c("c1", "c2")
)
)
sx <- as_sparta(x)
sparsity(sx)
Sparta Ones
Description
Construct a sparta object filled with ones
Usage
sparta_ones(dim_names)
Arguments
dim_names |
A named list of discrete levels |
Value
A sparta object
Examples
sparta_ones(list(a = c("a1", "a2"), b = c("b1", "b2")))
Construct sparta object
Description
Helper function to construct a sparta object with given values and dim names
Usage
sparta_struct(x, vals, dim_names)
Arguments
x |
matrix where columns represents cells in an array-like object |
vals |
vector of values corresponding to x |
dim_names |
a named list |
Value
A sparta object
Examples
x <- array(
c(1,0,0,2,3,4,0,0),
dim = c(2,2,2),
dimnames = list(
a = c("a1", "a2"),
b = c("b1", "b2"),
c = c("c1", "c2")
)
)
sx <- as_sparta(x)
sparta_struct(unclass(sx), vals(sx), dim_names(sx))
Sparse unity table
Description
Construct a sparse table of ones
Usage
sparta_unity_struct(dim_names, rank = 1L)
Arguments
dim_names |
A named list of discrete levels |
rank |
The value of each element. Default is |
Value
A sparta object
Examples
s <- sparta_unity_struct(list(a = c("a1", "a2"), b = c("b1", "b2")), rank = 1)
mult(s, 2)
Vector-like operations on sparta objects
Description
Vector-like operations on sparta objects
Usage
## S3 method for class 'sparta'
sum(x, ...)
## S3 method for class 'sparta'
max(x, ...)
## S3 method for class 'sparta'
min(x, ...)
which_min_cell(x)
## S3 method for class 'sparta'
which_min_cell(x)
which_min_idx(x)
## S3 method for class 'sparta'
which_min_idx(x)
which_max_cell(x)
## S3 method for class 'sparta'
which_max_cell(x)
which_max_idx(x)
## S3 method for class 'sparta'
which_max_idx(x)
Arguments
x |
sparta |
... |
For S3 compatability. |
Number of elements in a table
Description
Number of elements in a table
Usage
table_size(x)
## S3 method for class 'sparta'
table_size(x)
Arguments
x |
sparta |
Value
The size of the sparta table x
Examples
x <- array(
c(1,0,0,2,3,4,0,0),
dim = c(2,2,2),
dimnames = list(
a = c("a1", "a2"),
b = c("b1", "b2"),
c = c("c1", "c2")
)
)
sx <- as_sparta(x)
table_size(sx)
Sparta getters
Description
Getter methods for sparta objects
Usage
vals(x)
## S3 method for class 'sparta'
vals(x)
get_values(x)
## S3 method for class 'sparta'
get_values(x)
dim_names(x)
## S3 method for class 'sparta'
dim_names(x)
## S3 method for class 'sparta'
names(x)
sparta_rank(x)
## S3 method for class 'sparta_unity'
sparta_rank(x)
Arguments
x |
sparta object |