Надеюсь, я вас правильно понял, вы определили функцию, которая принимает 2 переменные, и Reduce будет работать над этим:
matrix_function=function(x,y)cbind(v1=x[,1]+y[,1],v2=x[,2]-y[,2])
library(zoo)
Reduce(matrix_function,list(df1.zoo,df2.zoo))
v1 v2
1999-01-11 2 -1
1999-03-08 6 3
1999-04-05 8 4
Мы пробуем это на 1000 данных, сначала у нас есть матрица с 1000 столбцами и 5 значений строки будут взяты каждым data.frame в списке:
set.seed(100)
v1_matrix = matrix(runif(5000),nrow=5)
v2_matrix = matrix(runif(5000),nrow=5)
list_of_df = lapply(1:1000,function(i){
fmt <- "%m/%d/%Y"
df <- data.frame(
date=c('1/11/1999', '2/5/1999', '3/8/1999','4/5/1999','6/11/1999'),
v1=v1_matrix[,i], v2=v2_matrix[,i])
df$date <- as.Date(df$date, format = fmt)
df.zoo <- read.zoo(df)
df.zoo
})
Мы применяем функцию и Уменьшаем:
res=Reduce(matrix_function,list_of_df)
Первый столбец должен быть строкой Суммы первая матрица:
res[,1] == rowSums(v1_matrix)
1999-01-11 1999-02-05 1999-03-08 1999-04-05 1999-06-11
TRUE TRUE TRUE TRUE TRUE
Второй столбец должен быть первым столбцом 2-й матрицы, вычитая сумму оставшегося столбца:
res[,2] == v2_matrix[,1]-rowSums(v2_matrix[,-1])
1999-01-11 1999-02-05 1999-03-08 1999-04-05 1999-06-11
TRUE TRUE TRUE TRUE TRUE