Sums over repeated indices in an `array`

.

`contraction(x, i = NULL, drop = TRUE)`

- x
indexed

`array`

. See`index`

.- i
subset of repeated indices to sum up. If

`NULL`

, the summation takes place on all the repeated indices.- drop
`logical`

. Drop summation indices? If`FALSE`

, keep dummy dimensions.

`array`

.

Guidotti E (2022). "calculus: High-Dimensional Numerical and Symbolic Calculus in R." Journal of Statistical Software, 104(5), 1-37. doi:10.18637/jss.v104.i05

```
### matrix trace
x <- matrix(letters[1:4], nrow = 2)
contraction(x)
#> [1] "a + d"
### tensor trace
x <- array(1:27, dim = c(3,3,3))
contraction(x)
#> [1] 42
#### tensor contraction over repeated indices
x <- array(1:27, dim = c(3,3,3))
index(x) <- c("i","i","j")
contraction(x)
#> [1] 15 42 69
#### tensor contraction over specific repeated indices only
x <- array(1:16, dim = c(2,2,2,2))
index(x) <- c("i","i","k","k")
contraction(x, i = "k")
#> [,1] [,2]
#> [1,] 14 18
#> [2,] 16 20
#### tensor contraction keeping dummy dimensions
x <- array(letters[1:16], dim = c(2,2,2,2))
index(x) <- c("i","i","k","k")
contraction(x, drop = FALSE)
#> [,1] [,2]
#> [1,] "a" "m"
#> [2,] "d" "p"
```