Authors: Koki Tsuyuzaki [aut, cre]
Last modified: 2024-11-29 05:23:18.287735
Compiled: Fri Nov 29 05:25:36 2024
suppressPackageStartupMessages(library("DelayedTensor"))
suppressPackageStartupMessages(library("DelayedArray"))
suppressPackageStartupMessages(library("HDF5Array"))
suppressPackageStartupMessages(library("DelayedRandomArray"))
darr <- RandomUnifArray(c(3,4,5))
setVerbose(FALSE)
setSparse(FALSE)
setAutoBlockSize(1E+8)
## automatic block size set to 1e+08 bytes (was 1e+08)
Tensor decomposition models decompose multiple factor matrices and core tensor. Each factor matrix means the patterns of each mode and is used for the visualization and the downstream analysis. Core tensor means the intensity of the patterns and is used to decide which patterns are informative.
We reimplemented some of the tensor decomposition functions of rTensor using block processing of DelayedArray.
Only tensor decomposition algorithms and utility functions that
require Fast Fourier Transform (e.g., t_mult
,
t_svd
, and t_svd_reconstruct
) are exceptions
and have not yet been implemented in DelayedArray
because we are still investigating how to calculate them with
out-of-core manner.
Suppose a tensor π³ββββIβ Γβ Jβ Γβ K. Tucker decomposition models decomposes a tensor π³ into a core tensor π’ββββpβ Γβ qβ Γβ r, and multiple factor matrices AββββIβ Γβ p, BββββJβ Γβ q, and CββββKβ Γβ r (pββ€βI,βqββ€βJ,βandΒ rββ€βK).
π³β=βπ’Γ1AΓ2BΓ3C
For simplicity, here we will use a third-order tensor but the Tucker decomposition can be applied to tensors of larger orders.
There are well-known two algorithms; Higher-Order Singular Value Decomposition (HOSVD) and Higher-order Orthogonal Iteration (HOOI).
hosvd
performs the HOSVD Tucker decomposition and
tucker
performs HOOI Tucker decomposition.
For the details, check the hosvd
and tucker
functions of rTensor.
## | | | 0% | |======================= | 33% | |=============================================== | 67% | |======================================================================| 100%
## List of 4
## $ Z :Formal class 'DelayedArray' [package "DelayedArray"] with 1 slot
## .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
## .. .. .. ..@ filepath : chr "/tmp/Rtmp1iRh0G/auto133b1a6adf80.h5"
## .. .. .. ..@ name : chr "/HDF5ArrayAUTO00125"
## .. .. .. ..@ as_sparse: logi FALSE
## .. .. .. ..@ type : chr NA
## .. .. .. ..@ dim : int [1:3] 2 1 3
## .. .. .. ..@ chunkdim : int [1:3] 2 1 3
## .. .. .. ..@ first_val: num -4.19
## $ U :List of 3
## ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. .. ..@ seed: num [1:3, 1:2] -0.5627 -0.5534 -0.6141 -0.0134 0.7488 ...
## ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. .. ..@ seed: num [1:4, 1] -0.496 -0.547 -0.463 -0.49
## ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. .. ..@ seed: num [1:5, 1:3] -0.385 -0.542 -0.382 -0.437 -0.471 ...
## $ est :Formal class 'DelayedArray' [package "DelayedArray"] with 1 slot
## .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
## .. .. .. ..@ filepath : chr "/tmp/Rtmp1iRh0G/auto133b4ea61308.h5"
## .. .. .. ..@ name : chr "/HDF5ArrayAUTO00142"
## .. .. .. ..@ as_sparse: logi FALSE
## .. .. .. ..@ type : chr NA
## .. .. .. ..@ dim : int [1:3] 3 4 5
## .. .. .. ..@ chunkdim : int [1:3] 3 4 5
## .. .. .. ..@ first_val: num 0.452
## $ fnorm_resid: num 1.64
## | | | 0% | |=== | 4% | |====== | 8% | |======== | 12% | |=========== | 16% | |============== | 20% | |================= | 24% | |==================== | 28% | |====================== | 32% | |======================================================================| 100%
## List of 7
## $ Z :Formal class 'DelayedArray' [package "DelayedArray"] with 1 slot
## .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
## .. .. .. ..@ filepath : chr "/tmp/Rtmp1iRh0G/auto133b65f810ea.h5"
## .. .. .. ..@ name : chr "/HDF5ArrayAUTO00635"
## .. .. .. ..@ as_sparse: logi FALSE
## .. .. .. ..@ type : chr NA
## .. .. .. ..@ dim : int [1:3] 2 3 2
## .. .. .. ..@ chunkdim : int [1:3] 2 3 2
## .. .. .. ..@ first_val: num 4.19
## $ U :List of 3
## ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. .. ..@ seed: num [1:3, 1:2] -0.571 -0.55 -0.61 0.184 -0.809 ...
## ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. .. ..@ seed: num [1:4, 1:3] -0.5 -0.541 -0.467 -0.489 -0.862 ...
## ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. .. ..@ seed: num [1:5, 1:2] 0.384 0.547 0.376 0.442 0.466 ...
## $ conv : logi TRUE
## $ est :Formal class 'DelayedArray' [package "DelayedArray"] with 1 slot
## .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
## .. .. .. ..@ filepath : chr "/tmp/Rtmp1iRh0G/auto133b46eba75a.h5"
## .. .. .. ..@ name : chr "/HDF5ArrayAUTO00669"
## .. .. .. ..@ as_sparse: logi FALSE
## .. .. .. ..@ type : chr NA
## .. .. .. ..@ dim : int [1:3] 3 4 5
## .. .. .. ..@ chunkdim : int [1:3] 3 4 5
## .. .. .. ..@ first_val: num 0.466
## $ norm_percent: num 71.9
## $ fnorm_resid : num 1.27
## $ all_resids : num [1:8] 1.32 1.29 1.27 1.27 1.27 ...
Suppose a tensor π³ββββIβ Γβ Jβ Γβ K. CP decomposition models decomposes a tensor X into a core diagonal tensor π’ββββrβ Γβ rβ Γβ r, and multiple factor matrices AββββIβ Γβ r, BββββJβ Γβ r, and CββββKβ Γβ r (rββ€βminβ(I,βJ,βK)).
π³β=βπ’Γ1AΓ2BΓ3C
For simplicity, here we will use a third-order tensor but the CP decomposition can be applied to tensors of larger orders.
Alternating least squares (ALS) is a well-known algorithm for CP
decomposition and cp
performs the ALS CP decomposition.
For the details, check the cp
function of rTensor.
## | | | 0% | |=== | 4% | |====== | 8% | |======== | 12% | |=========== | 16% | |============== | 20% | |================= | 24% | |==================== | 28% | |====================== | 32% | |========================= | 36% | |============================ | 40% | |=============================== | 44% | |================================== | 48% | |==================================== | 52% | |======================================= | 56% | |========================================== | 60% | |============================================= | 64% | |======================================================================| 100%
## List of 7
## $ lambdas : num [1:2] 4.65 31.97
## $ U :List of 3
## ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. .. ..@ seed:Formal class 'DelayedAperm' [package "DelayedArray"] with 2 slots
## .. .. .. .. ..@ perm: int [1:2] 2 1
## .. .. .. .. ..@ seed:Formal class 'DelayedUnaryIsoOpWithArgs' [package "DelayedArray"] with 6 slots
## .. .. .. .. .. .. ..@ OP :function (e1, e2)
## .. .. .. .. .. .. ..@ Largs : list()
## .. .. .. .. .. .. ..@ Rargs :List of 1
## .. .. .. .. .. .. .. ..$ : num [1:2] 4.65 31.97
## .. .. .. .. .. .. ..@ Lalong: int(0)
## .. .. .. .. .. .. ..@ Ralong: int 1
## .. .. .. .. .. .. ..@ seed :Formal class 'DelayedAperm' [package "DelayedArray"] with 2 slots
## .. .. .. .. .. .. .. .. ..@ perm: int [1:2] 2 1
## .. .. .. .. .. .. .. .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
## .. .. .. .. .. .. .. .. .. .. ..@ filepath : chr "/tmp/Rtmp1iRh0G/auto133b65a2dd14.h5"
## .. .. .. .. .. .. .. .. .. .. ..@ name : chr "/HDF5ArrayAUTO01716"
## .. .. .. .. .. .. .. .. .. .. ..@ as_sparse: logi FALSE
## .. .. .. .. .. .. .. .. .. .. ..@ type : chr NA
## .. .. .. .. .. .. .. .. .. .. ..@ dim : int [1:2] 3 2
## .. .. .. .. .. .. .. .. .. .. ..@ chunkdim : int [1:2] 3 2
## .. .. .. .. .. .. .. .. .. .. ..@ first_val: num 1.81
## ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. .. ..@ seed:Formal class 'DelayedAperm' [package "DelayedArray"] with 2 slots
## .. .. .. .. ..@ perm: int [1:2] 2 1
## .. .. .. .. ..@ seed:Formal class 'DelayedUnaryIsoOpWithArgs' [package "DelayedArray"] with 6 slots
## .. .. .. .. .. .. ..@ OP :function (e1, e2)
## .. .. .. .. .. .. ..@ Largs : list()
## .. .. .. .. .. .. ..@ Rargs :List of 1
## .. .. .. .. .. .. .. ..$ : num [1:2] 4.64 31.97
## .. .. .. .. .. .. ..@ Lalong: int(0)
## .. .. .. .. .. .. ..@ Ralong: int 1
## .. .. .. .. .. .. ..@ seed :Formal class 'DelayedAperm' [package "DelayedArray"] with 2 slots
## .. .. .. .. .. .. .. .. ..@ perm: int [1:2] 2 1
## .. .. .. .. .. .. .. .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
## .. .. .. .. .. .. .. .. .. .. ..@ filepath : chr "/tmp/Rtmp1iRh0G/auto133b4f57943e.h5"
## .. .. .. .. .. .. .. .. .. .. ..@ name : chr "/HDF5ArrayAUTO01739"
## .. .. .. .. .. .. .. .. .. .. ..@ as_sparse: logi FALSE
## .. .. .. .. .. .. .. .. .. .. ..@ type : chr NA
## .. .. .. .. .. .. .. .. .. .. ..@ dim : int [1:2] 4 2
## .. .. .. .. .. .. .. .. .. .. ..@ chunkdim : int [1:2] 4 2
## .. .. .. .. .. .. .. .. .. .. ..@ first_val: num 0.535
## ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. .. ..@ seed:Formal class 'DelayedAperm' [package "DelayedArray"] with 2 slots
## .. .. .. .. ..@ perm: int [1:2] 2 1
## .. .. .. .. ..@ seed:Formal class 'DelayedUnaryIsoOpWithArgs' [package "DelayedArray"] with 6 slots
## .. .. .. .. .. .. ..@ OP :function (e1, e2)
## .. .. .. .. .. .. ..@ Largs : list()
## .. .. .. .. .. .. ..@ Rargs :List of 1
## .. .. .. .. .. .. .. ..$ : num [1:2] 4.65 31.97
## .. .. .. .. .. .. ..@ Lalong: int(0)
## .. .. .. .. .. .. ..@ Ralong: int 1
## .. .. .. .. .. .. ..@ seed :Formal class 'DelayedAperm' [package "DelayedArray"] with 2 slots
## .. .. .. .. .. .. .. .. ..@ perm: int [1:2] 2 1
## .. .. .. .. .. .. .. .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
## .. .. .. .. .. .. .. .. .. .. ..@ filepath : chr "/tmp/Rtmp1iRh0G/auto133b5a527536.h5"
## .. .. .. .. .. .. .. .. .. .. ..@ name : chr "/HDF5ArrayAUTO01762"
## .. .. .. .. .. .. .. .. .. .. ..@ as_sparse: logi FALSE
## .. .. .. .. .. .. .. .. .. .. ..@ type : chr NA
## .. .. .. .. .. .. .. .. .. .. ..@ dim : int [1:2] 5 2
## .. .. .. .. .. .. .. .. .. .. ..@ chunkdim : int [1:2] 5 2
## .. .. .. .. .. .. .. .. .. .. ..@ first_val: num 0.232
## $ conv : logi TRUE
## $ est :Formal class 'DelayedArray' [package "DelayedArray"] with 1 slot
## .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
## .. .. .. ..@ filepath : chr "/tmp/Rtmp1iRh0G/auto133b1c4e645.h5"
## .. .. .. ..@ name : chr "/HDF5ArrayAUTO01779"
## .. .. .. ..@ as_sparse: logi FALSE
## .. .. .. ..@ type : chr NA
## .. .. .. ..@ dim : int [1:3] 3 4 5
## .. .. .. ..@ chunkdim : int [1:3] 3 4 5
## .. .. .. ..@ first_val: num 0.496
## $ norm_percent: num 68.5
## $ fnorm_resid : num 1.42
## $ all_resids : num [1:16] 1.7 1.52 1.46 1.43 1.43 ...
MPCA is a kind of Tucker decomposition and when the order of tensor
is 3, this is also known as the Generalized Low-Rank Approximation of
Matrices (GLRAM). For the details, check the mpca
function
of rTensor.
## | | | 0% | |=== | 4% | |====== | 8% | |======== | 12% | |=========== | 16% | |======================================================================| 100%
## List of 7
## $ Z_ext :Formal class 'DelayedArray' [package "DelayedArray"] with 1 slot
## .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
## .. .. .. ..@ filepath : chr "/tmp/Rtmp1iRh0G/auto133b64773178.h5"
## .. .. .. ..@ name : chr "/HDF5ArrayAUTO01913"
## .. .. .. ..@ as_sparse: logi FALSE
## .. .. .. ..@ type : chr NA
## .. .. .. ..@ dim : int [1:3] 2 2 5
## .. .. .. ..@ chunkdim : int [1:3] 2 2 5
## .. .. .. ..@ first_val: num 1.64
## $ U :List of 3
## ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. .. ..@ seed: num [1:3, 1:2] -0.567 -0.547 -0.616 0.392 -0.837 ...
## ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. .. ..@ seed: num [1:4, 1:2] -0.499 -0.538 -0.469 -0.491 0.865 ...
## ..$ : NULL
## $ conv : logi TRUE
## $ est :Formal class 'DelayedArray' [package "DelayedArray"] with 1 slot
## .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
## .. .. .. ..@ filepath : chr "/tmp/Rtmp1iRh0G/auto133b1b106db5.h5"
## .. .. .. ..@ name : chr "/HDF5ArrayAUTO01935"
## .. .. .. ..@ as_sparse: logi FALSE
## .. .. .. ..@ type : chr NA
## .. .. .. ..@ dim : int [1:3] 3 4 5
## .. .. .. ..@ chunkdim : int [1:3] 3 4 5
## .. .. .. ..@ first_val: num 0.577
## $ norm_percent: num 71.8
## $ fnorm_resid : num 1.27
## $ all_resids : num [1:4] 1.28 1.27 1.27 1.27
Suppose a series of 2D data X_{j}, where Xjββββn1β Γβ n2, and jβ=β1,ββ¦,βn3. PVD models decomposes a tensor Xj into two common factor matrices across all Xj, Pββββn1β Γβ r1 and Dββββn2β Γβ r2, and a Xj specific factor matrix Vjββββr1β Γβ r2 (r1ββ€βn1,βandΒ r2ββ€βn2).
Xjβ=βPβ Γβ Vjβ Γβ D
For the details, check the pvd
function of rTensor.
## | | | 0% | |========= | 12% | |================== | 25% | |========================== | 38% | |=================================== | 50% | |============================================ | 62% | |==================================================== | 75% | |============================================================= | 88% | |======================================================================| 100%
## List of 6
## $ P :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. ..@ seed: num [1:3, 1:2] -0.572 -0.61 -0.548 0.372 0.403 ...
## $ D :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. ..@ seed:Formal class 'DelayedAperm' [package "DelayedArray"] with 2 slots
## .. .. .. ..@ perm: int [1:2] 2 1
## .. .. .. ..@ seed: num [1:4, 1:3] -0.597 -0.423 -0.479 -0.485 0.607 ...
## $ V :List of 5
## ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
## .. .. .. .. ..@ filepath : chr "/tmp/Rtmp1iRh0G/auto133b6a90889b.h5"
## .. .. .. .. ..@ name : chr "/HDF5ArrayAUTO01969"
## .. .. .. .. ..@ as_sparse: logi FALSE
## .. .. .. .. ..@ type : chr NA
## .. .. .. .. ..@ dim : int [1:2] 2 3
## .. .. .. .. ..@ chunkdim : int [1:2] 2 3
## .. .. .. .. ..@ first_val: num 1.6
## ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
## .. .. .. .. ..@ filepath : chr "/tmp/Rtmp1iRh0G/auto133b68ce6163.h5"
## .. .. .. .. ..@ name : chr "/HDF5ArrayAUTO01975"
## .. .. .. .. ..@ as_sparse: logi FALSE
## .. .. .. .. ..@ type : chr NA
## .. .. .. .. ..@ dim : int [1:2] 2 3
## .. .. .. .. ..@ chunkdim : int [1:2] 2 3
## .. .. .. .. ..@ first_val: num 2.19
## ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
## .. .. .. .. ..@ filepath : chr "/tmp/Rtmp1iRh0G/auto133b1675d054.h5"
## .. .. .. .. ..@ name : chr "/HDF5ArrayAUTO01981"
## .. .. .. .. ..@ as_sparse: logi FALSE
## .. .. .. .. ..@ type : chr NA
## .. .. .. .. ..@ dim : int [1:2] 2 3
## .. .. .. .. ..@ chunkdim : int [1:2] 2 3
## .. .. .. .. ..@ first_val: num 1.58
## ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
## .. .. .. .. ..@ filepath : chr "/tmp/Rtmp1iRh0G/auto133b1102cb85.h5"
## .. .. .. .. ..@ name : chr "/HDF5ArrayAUTO01987"
## .. .. .. .. ..@ as_sparse: logi FALSE
## .. .. .. .. ..@ type : chr NA
## .. .. .. .. ..@ dim : int [1:2] 2 3
## .. .. .. .. ..@ chunkdim : int [1:2] 2 3
## .. .. .. .. ..@ first_val: num 1.87
## ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
## .. .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
## .. .. .. .. ..@ filepath : chr "/tmp/Rtmp1iRh0G/auto133b23a7e5d3.h5"
## .. .. .. .. ..@ name : chr "/HDF5ArrayAUTO01993"
## .. .. .. .. ..@ as_sparse: logi FALSE
## .. .. .. .. ..@ type : chr NA
## .. .. .. .. ..@ dim : int [1:2] 2 3
## .. .. .. .. ..@ chunkdim : int [1:2] 2 3
## .. .. .. .. ..@ first_val: num 1.91
## $ est :Formal class 'DelayedArray' [package "DelayedArray"] with 1 slot
## .. ..@ seed: num [1:3, 1:4, 1:5] 0.284 0.3 0.738 0.256 0.269 ...
## $ norm_percent: num 71.1
## $ fnorm_resid : num 1.3
## R version 4.4.2 (2024-10-31)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 24.04.1 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so; LAPACK version 3.12.0
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=C
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## time zone: Etc/UTC
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats4 stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] DelayedRandomArray_1.15.0 HDF5Array_1.35.1
## [3] rhdf5_2.51.0 DelayedArray_0.33.2
## [5] SparseArray_1.7.2 S4Arrays_1.7.1
## [7] abind_1.4-8 IRanges_2.41.1
## [9] S4Vectors_0.45.2 MatrixGenerics_1.19.0
## [11] matrixStats_1.4.1 BiocGenerics_0.53.3
## [13] generics_0.1.3 Matrix_1.7-1
## [15] DelayedTensor_1.13.0 BiocStyle_2.35.0
##
## loaded via a namespace (and not attached):
## [1] dqrng_0.4.1 sass_0.4.9 lattice_0.22-6
## [4] digest_0.6.37 evaluate_1.0.1 grid_4.4.2
## [7] fastmap_1.2.0 jsonlite_1.8.9 BiocManager_1.30.25
## [10] codetools_0.2-20 jquerylib_0.1.4 cli_3.6.3
## [13] rlang_1.1.4 crayon_1.5.3 XVector_0.47.0
## [16] cachem_1.1.0 yaml_2.3.10 tools_4.4.2
## [19] beachmat_2.23.2 parallel_4.4.2 BiocParallel_1.41.0
## [22] einsum_0.1.2 Rhdf5lib_1.29.0 rsvd_1.0.5
## [25] buildtools_1.0.0 R6_2.5.1 lifecycle_1.0.4
## [28] zlibbioc_1.52.0 BiocSingular_1.23.0 irlba_2.3.5.1
## [31] ScaledMatrix_1.15.0 rTensor_1.4.8 bslib_0.8.0
## [34] Rcpp_1.0.13-1 xfun_0.49 sys_3.4.3
## [37] knitr_1.49 rhdf5filters_1.19.0 htmltools_0.5.8.1
## [40] rmarkdown_2.29 maketools_1.3.1 compiler_4.4.2