У меня есть 13 матриц различных размеров, которые я хотел бы использовать в парных матричных корреляциях с пользовательской функцией (которая вычисляет коэффициент Rv). Функция принимает два аргумента (matrix1, matrix2) и создает скаляр (в основном многовариантное значение r). Я хотел бы запустить функцию на всех возможных парах матриц (итого 78 корреляций) и получить матрицу 13 на 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?