在 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)
我在 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)