基于R中的apply函数创建矩阵
create matrix based on apply function in R
我在 R 中有一个像这样的矩阵
dat <- matrix(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1), ncol = 4)
我想计算互信息的局部变量 (lv)。对于一对列,我可以使用以下代码找到 lv
dat <- dat[,c(1,2)]
#install.packages("rinform")
library(rinform)
library(devtools)
#install_github("ELIFE-ASU/rinform")
#install_github("ELIFE-ASU/rinform", ref = "dev")
library(rinform)
mutual_info(dat)
mi <- mutual_info(dat, local = T)
mi <- as.matrix(mi)
这导致:
> mi
[,1]
[1,] -1.0000000
[2,] -1.0000000
[3,] 0.2223924
[4,] 0.2223924
[5,] 0.2223924
[6,] 0.2223924
[7,] 0.2223924
[8,] 0.2223924
[9,] 0.2223924
[10,] 0.2223924
[11,] 0.2223924
[12,] 0.2223924
[13,] 0.2223924
[14,] 0.2223924
[15,] 0.2223924
[16,] 0.2223924
[17,] 1.5849625
[18,] 1.5849625
[19,] 1.5849625
[20,] -1.5849625
如何创建一个矩阵,使每一列都具有每对的 mi
值?尝试使用应用功能但无法使其工作。输出结果必须是一个包含所有成对列组合的 20x6
矩阵,即上述 mi 过程 dat[,c(1,2)]
、dat[,c(1,3)]
、dat[,c(1,4)]
、dat[,c(2,3)]
, dat[,c(2,4)]
, dat[,c(3,4)]
。有人可以帮助我吗?
我无法验证这种方法,因为我不知道 rinform
包。你可以试试
apply(combn(1:4, 2), 2, function(i) mutual_info(dat[, i], locale = TRUE))
combn(1:4, 2)
从 1:4
. 创建一个包含所有可能的两个元素的矩阵
- 我们将其用作
apply
函数的输入以生成结果。
命名
如果将新数据存入矩阵
new_data <- apply(combn(1:4, 2), 2, function(i) mutual_info(dat[, i], locale = TRUE))
您可以使用相同的方法命名列:
colnames(new_data) <- apply(combn(1:4, 2), 2, function(i) paste0("V", i, collapse = ""))
我在 R 中有一个像这样的矩阵
dat <- matrix(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1), ncol = 4)
我想计算互信息的局部变量 (lv)。对于一对列,我可以使用以下代码找到 lv
dat <- dat[,c(1,2)]
#install.packages("rinform")
library(rinform)
library(devtools)
#install_github("ELIFE-ASU/rinform")
#install_github("ELIFE-ASU/rinform", ref = "dev")
library(rinform)
mutual_info(dat)
mi <- mutual_info(dat, local = T)
mi <- as.matrix(mi)
这导致:
> mi
[,1]
[1,] -1.0000000
[2,] -1.0000000
[3,] 0.2223924
[4,] 0.2223924
[5,] 0.2223924
[6,] 0.2223924
[7,] 0.2223924
[8,] 0.2223924
[9,] 0.2223924
[10,] 0.2223924
[11,] 0.2223924
[12,] 0.2223924
[13,] 0.2223924
[14,] 0.2223924
[15,] 0.2223924
[16,] 0.2223924
[17,] 1.5849625
[18,] 1.5849625
[19,] 1.5849625
[20,] -1.5849625
如何创建一个矩阵,使每一列都具有每对的 mi
值?尝试使用应用功能但无法使其工作。输出结果必须是一个包含所有成对列组合的 20x6
矩阵,即上述 mi 过程 dat[,c(1,2)]
、dat[,c(1,3)]
、dat[,c(1,4)]
、dat[,c(2,3)]
, dat[,c(2,4)]
, dat[,c(3,4)]
。有人可以帮助我吗?
我无法验证这种方法,因为我不知道 rinform
包。你可以试试
apply(combn(1:4, 2), 2, function(i) mutual_info(dat[, i], locale = TRUE))
combn(1:4, 2)
从1:4
. 创建一个包含所有可能的两个元素的矩阵
- 我们将其用作
apply
函数的输入以生成结果。
命名
如果将新数据存入矩阵
new_data <- apply(combn(1:4, 2), 2, function(i) mutual_info(dat[, i], locale = TRUE))
您可以使用相同的方法命名列:
colnames(new_data) <- apply(combn(1:4, 2), 2, function(i) paste0("V", i, collapse = ""))