在 R 中创建一个包含表的列表

create a list containing tables in R

我在 R 中有以下数据集,我想计算香农熵。为了做到这一点,因为数据是连续的,我必须将它们离散化。使用Entropy包的discretize2d函数,$X_1$和$X_2$之间的熵可以计算如下:

set.seed(1234)
data <- matrix(rnorm(150 * 11, mean = 0, sd = 1), 150, 11)

library(entropy)
dis <- discretize2d(data[,1],data[,2], numBins1 = 10, numBins2 = 10)

entropy(dis)

我想创建一个 list,其中包含 data 变量之间的所有 discretize2d 结果,这样我以后可以只使用 entropy(dis.2) 并获得相同的结果作为 entropy(dis)。有人可以帮我编码吗?

这是一个 all-base R 解决方案。我们使用 combn(x, m) 函数生成 x 的元素的所有组合,大小为 m。这里我们想要对 m = 2。这将创建一个 2 x 55 矩阵。然后使用 apply() 在该矩阵的列上迭代应用 discretize2d()apply() 的第二个参数是 2,表示应用于列。我们还指定 simplify = FALSE 以便结果将保留为列表而不是被强制为数组。

combs <- combn(1:ncol(data), 2)
dis <- apply(combs, 2, function(x) discretize2d(dat[, x[1]], dat[, x[2]], numBins1 = 10, numBins2 = 10), simplify = FALSE)

如果您想要为您指定的元素命名,例如 dis.2,您可以这样做:

names(dis) <- apply(combs, 2, paste, collapse = '.')

最后,您还可以使用 lapply():

一次计算所有元素的熵
lapply(dis, entropy)