如何在数据 table 的单元格中存储均值向量和协方差矩阵?

How to store mean vectors and covariance matrices in cells of a data table?

考虑一个具有两个数字特征和一个分类特征的数据 table。我想将此数据 table 转换为新数据 table。此数据的每一行 table 应对应于分类特征的一个值。此外,它应该包含一个列,其中包含每个分类值的数字特征产生的均值向量,以及一个包含协方差矩阵的列。此外,只能使用包含引用数字特征的列名称的对象。

似乎必须为此使用列表,例如 R - store a matrix into a single dataframe cell。但是,这些信息对我的帮助还不够。

这是一个例子:

library(data.table)

set.seed(42)
a <- sample(1:3, 10, TRUE)
b <- rnorm(10)
d <- rpois(10, 3)
data <- data.table(a, b, d)
bd <- c("b", "d")

dat <- data[, 
            .(mu = mean(get(bd)), 
              sigma = get(cov(bd))), 
            by = a]

我想要的是dat有三行,每一行对应a中的一个值。此数据 table 还应包含一个包含三个长度为 2 的向量的列和一个包含三个 2x2 矩阵的列。

我们可以使用 mget 而不是 get,因为 get 用于返回单个对象值,而 mget 用于返回一个或多个

data[, lapply(mget(bd), function(x) mean(x)), by = a]

如果我们需要 list

data[, .(mu = .(as.list(lapply(mget(bd), function(x) mean(x))))), by = a]

如果我们想要两列,即 cov

data[, .(mu = .(sapply(mget(bd), function(x) mean(x))), 
       sigma = .(cov(do.call(cbind, mget(bd)))[2])), by = a]
   a                  mu     sigma
1: 1 0.2353046,2.2000000 -2.131663
2: 2 0.1876238,3.3333333  2.062627
3: 3 0.9299794,1.5000000 0.1445644