если мы нормализуем размеры каждого matrix
или data.frame
от jjj
до tt
, продукт будет просто умножать каждый элемент списка на другой.
Во-первых, мы собрали более простой пример данных
list1 <- list( data.frame(COL1 = c(1,2,3,4),
COL2 = c(5,6,7,8)),
data.frame(COL1 = c(2,2,2,2),
COL2 = c(3,3,3,3)))
list2 <- list( data.frame(COL1 = c(2),
COL2 = c(3)),
data.frame(COL1 = c(3),
COL2 = c(2))
)
> list1
[[1]]
COL1 COL2
1 1 5
2 2 6
3 3 7
4 4 8
[[2]]
COL1 COL2
1 2 3
2 2 3
3 2 3
4 2 3
> list2
[[1]]
COL1 COL2
1 2 3
[[2]]
COL1 COL2
1 3 2
Функция multm
нормализует data.frame df2
в соответствии с размерами df1
и возвращает произведение между ними.
multm <- function(df1, df2) {
m1 <- as.matrix(df1)
m2 <- as.matrix(df2)
m2 <- matrix(rep(as.vector(m2), nrow(m1)), ncol=ncol(m1), byrow=T)
as.data.frame(m1 * m2)
}
Наконец, мы применяем функцию к каждому элементу обоих списков
lapply(1:length(list1), FUN=function(x){multm(list1[[x]], list2[[x]])})
[[1]]
COL1 COL2
1 2 15
2 4 18
3 6 21
4 8 24
[[2]]
COL1 COL2
1 6 6
2 6 6
3 6 6
4 6 6