gpt4 book ai didi

r - R中的成对矩阵相关性 - 如何遍历所有对?

转载 作者:行者123 更新时间:2023-12-01 01:32:16 25 4
gpt4 key购买 nike

我有 13 个不同维度的矩阵,我想在与自定义函数(计算 Rv 系数)的成对矩阵相关中使用它们。该函数接受两个参数(matrix1、matrix2)并产生一个标量(基本上是一个多变量 r 值)。我想在所有可能的矩阵对上运行该函数(因此总共有 78 个相关性),并生成一个 13 x 13 的矩阵,其中包含结果 Rv 值的行和列中 13 个矩阵的名称。我想尝试通过将矩阵放在列表中并使用双 for 循环来遍历列表的元素来做到这一点,但这似乎非常复杂。我在下面给出了一个带有虚拟数据的精简示例。有没有人对如何解决这个问题有任何建议?提前致谢。

# Rv function  
Rv <- function(M1, M2) {
tr <- function(x) sum( diag(x) )
psd <- function(x) x %*% t(x)
AA <- psd(M1)
BB <- psd(M2)
num <- tr(AA %*% BB)
den <- sqrt( tr(AA %*% AA) * tr(BB %*% BB) )
Rv <- num / den
list(Rv=Rv, "Rv^2"=Rv^2)
}

# data in separate matricies
matrix1 <- matrix(rnorm(100), 10, 10)
matrix2 <- matrix(rnorm(100), 10, 10)
# ... etc. up to matrix 13

# or, in a list
matrix1 <- list( matrix(rnorm(100), 10, 10) )
rep(matrix1, 13) # note, the matrices are identical in this example

# call Rv function
Rv1 <- Rv(matrix1, matrix2)
Rv1$Rv^2

# loop through all 78 combinations?
# store results in 13 by 13 matrix with matrix rownames and colnames?

最佳答案

我过去用的是expand.grid()其次是 apply() .这是一个仅使用 1:3 而不是 1:13 的简单示例。

R> work <- expand.grid(1:3,1:3)
R> work
Var1 Var2
1 1 1
2 2 1
3 3 1
4 1 2
5 2 2
6 3 2
7 1 3
8 2 3
9 3 3
R> apply(work, 1, function(z) prod(z))
[1] 1 2 3 2 4 6 3 6 9
R>

你显然想要一个不同的工作函数。

关于r - R中的成对矩阵相关性 - 如何遍历所有对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4034271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com