Speed up covariance calculation for large matrices. The
default behavior is the same as `cov`

(`'pearson'`

,
no `NA`

handling).

## Arguments

- x
a numeric vector, matrix or data frame; a matrix is highly recommended to maximize the performance

- y
NULL (default) or a vector, matrix or data frame with compatible dimensions to x; the default is equivalent to

`y = x`

- col_x
integers indicating the subset indices (columns) of

`x`

to calculate the covariance, or`NULL`

to include all the columns; default is`NULL`

- col_y
integers indicating the subset indices (columns) of

`y`

to calculate the covariance, or`NULL`

to include all the columns; default is`NULL`

- df
a scalar indicating the degrees of freedom; default is

`nrow(x)-1`

## Value

A covariance matrix of `x`

and `y`

. Note that there is no
`NA`

handling. Any missing values will lead to `NA`

in the
resulting covariance matrices.

## Examples

```
# Set ncores = 2 to comply to CRAN policy. Please don't run this line
ravetools_threads(n_threads = 2L)
x <- matrix(rnorm(400), nrow = 100)
# Call `cov(x)` to compare
fast_cov(x)
#> [,1] [,2] [,3] [,4]
#> [1,] 1.17573362 -0.03815376 -0.02612938 0.09084506
#> [2,] -0.03815376 0.98190035 -0.04280019 0.04419732
#> [3,] -0.02612938 -0.04280019 1.17968697 -0.02620016
#> [4,] 0.09084506 0.04419732 -0.02620016 0.92915144
# Calculate covariance of subsets
fast_cov(x, col_x = 1, col_y = 1:2)
#> [,1] [,2]
#> [1,] 1.175734 -0.03815376
if(interactive()){
# Speed comparison, better to use multiple cores (4, 8, or more)
# to show the differences.
ravetools_threads(n_threads = -1)
x <- matrix(rnorm(100000), nrow = 1000)
microbenchmark::microbenchmark(
fast_cov = {
fast_cov(x, col_x = 1:50, col_y = 51:100)
},
cov = {
cov(x[,1:50], x[,51:100])
},
unit = 'ms', times = 10
)
}
```