Learn R Programming

posterior (version 1.6.0)

rvar-slice: Random variable slicing

Description

Operations for slicing rvars and replacing parts of rvars.

Usage

# S3 method for rvar
[[(x, i, ...)

# S3 method for rvar [[(x, i, ...) <- value

# S3 method for rvar [(x, ..., drop = FALSE)

# S3 method for rvar [(x, i, ...) <- value

Arguments

x

an rvar.

i, ...

indices; see Details.

value

(rvar or coercable to rvar) Value to insert into x at the location determined by the indices.

drop

(logical) Should singular dimensions be dropped when slicing array rvars? Unlike base array slicing operations, defaults to FALSE.

Extracting or replacing single elements with <code>[[</code>

The [[ operator extracts (or replaces) single elements. It always returns (or replaces) a scalar (length-1) rvar.

The x[[i,...]] operator can be used as follows:

  • x[[<numeric>]] for scalar numeric i: gives the ith element of x. If x is multidimensional (i.e. length(dim(x)) > 1), extra dimensions are ignored when indexing. For example, if x is a \(6 \times 2\) rvar array, the 7th element, x[[7]], will be the first element of the second column, x[1,2].

  • x[[<numeric rvar>]] for scalar numeric rvar i: a generalization of indexing when i is a scalar numeric. Within each draw of x, selects the element corresponding to the value of i within that same draw.

  • x[[<character>]] for scalar character i: gives the element of x with name equal to i. Unlike with base arrays, does not work with multidimensional rvars.

  • x[[i_1,i_2,...,i_n]] for scalar numeric or character i_1, i_2, etc. Must provide exactly the same number of indices as dimensions in x. Selects the element at the corresponding position in the rvar by number and/or dimname (as a string).

Extracting or replacing multiple elements with <code>[</code>

The [ operator extracts (or replaces) multiple elements. It always returns (or replaces) a possibly-multidimensional rvar.

The x[i,...] operator can be used as follows:

  • x[<logical>] for vector logical i: i is recycled to the same length as x, ignoring multiple dimensions in x, then an rvar vector is returned containing the elements in x where i is TRUE.

  • x[<logical rvar>] for scalar logical rvar i: returns an rvar the same shape as x containing only those draws where i is TRUE.

  • x[<numeric>] for vector numeric i: an rvar vector is returned containing the ith elements of x, ignoring dimensions.

  • x[<matrix>] for numeric matrix i, where ncol(i) == length(dim(x)): each row of i should give the multidimensional index for a single element in x. The result is an rvar vector of length nrow(i) containing elements of x selected by each row of i.

  • x[i_1,i_2,...,i_n] for vector numeric, character, or logical i_1, i_2, etc. Returns a slice of x containing all elements from the dimensions specified in i_1, i_2, etc. If an argument is left empty, all elements from that dimension are included. Unlike base arrays, trailing dimensions can be omitted entirely and will still be selected; for example, if x has three dimensions, both x[1,,] and x[1,] can be used to create a slice that includes all elements from the last two dimensions. Unlike base arrays, [ defaults to drop = FALSE, so results retain the same number of dimensions as x.

Details

The rvar slicing operators ([ and [[) attempt to implement the same semantics as the base array slicing operators. There are some exceptions; most notably, rvar slicing defaults to drop = FALSE instead of drop = TRUE.

Examples

Run this code
x <- rvar(array(1:24, dim = c(4,2,3)))
dimnames(x) <- list(c("a","b"), c("d","e","f"))
x

## Slicing single elements
# x[[]]
x[[2]]

# x[[]]
# notice the draws of x[1:4]...
draws_of(x[1:4])
x[[rvar(c(1,3,4,4))]]
# ... x[[rvar(c(1,3,4,4))]] creates a mixures of those draws
draws_of(x[[rvar(c(1,3,4,4))]])

# x[[i_1,i_2,...]]
x[[2,"e"]]


## Slicing multiple elements
# x[]
x[c(TRUE,TRUE,FALSE)]

# x[]
# select every other draw
x[rvar(c(TRUE,FALSE,TRUE,FALSE))]

# x[]
x[1:3]

# x[]
x[rbind(
  c(1,2),
  c(1,3),
  c(2,2)
)]

# x[i_1,i_2,...,i_n]
x[1,]
x[1,2:3]
x[,2:3]

Run the code above in your browser using DataLab