Я только что столкнулся с той же проблемой, и, если я ясно понял вопрос, я мог бы решить ее, используя mapply
.
Мы будем использовать две матрицы 10x10, заполненные одинаковыми случайными значениями.
set.seed(1)
X <- matrix(runif(100), 10, 10)
set.seed(2)
Y <- matrix(runif(100), 10, 10)
Затем определите, как будут выполняться операции между матрицами.Если это построчно, вам нужно переставить X и Y, а затем привести к data.frame
.Это потому, что data.frame
- это list
со столбцами в качестве элементов списка.mapply()
предполагает, что вы передаете list
.В этом примере я буду выполнять корреляцию по строкам.
res.row <- mapply(function(x, y){cor(x, y)}, as.data.frame(t(X)), as.data.frame(t(Y)))
res.row[1]
V1
0.36788
должен совпадать с
cor(X[1,], Y[1,])
[1] 0.36788
Для операций со столбцами исключить t()
:
res.col <- mapply(function(x, y){cor(x, y)}, as.data.frame(X), as.data.frame(Y))
Это, очевидно, предполагает, что X
и Y
имеют размеры, согласующиеся с интересующей операцией (то есть они не должны быть точно такими же размерами).Например, может потребоваться статистический тест по строкам, но с разным количеством столбцов в каждой матрице.