Мы могли бы применить подход outer
для применения произвольной функции ко всем комбинациям элементов и двух объектов (списков / векторов).
Нам понадобится row.list
возрастающих последовательностей из пяти,
row.list <- lapply(1:(nrow(dat)-4), function(x) x:(x+4))
# [[1]]
# [1] 1 2 3 4 5
#
# [[2]]
# [1] 2 3 4 5 6
#
# [[3]]
# [1] 3 4 5 6 7
#
# [[4]]
# [1] 4 5 6 7 8
и вектор ev
наших независимых переменных.
ev <- c("X1", "X2", "X3")
Нам также понадобится наш regFUN
, который использует reformulate
для создания формул из строк,
regFUN <- Vectorize(function(x, i) lm(reformulate(x, "Y"), dat[i, -1])$coe[2])
и который мы наконец применяем ко всем комбинациям элементов наших двух объектов, используя outer
.
res <- t(outer(ev, row.list, regFUN))
Result
`colnames<-`(res, ev)
# X1 X2 X3
# [1,] 1.428571e-01 -0.05882353 0.2500000
# [2,] 3.333333e-01 -0.12500000 0.3461538
# [3,] 1.648597e-15 -0.37500000 0.1764706
# [4,] 0.000000e+00 0.37500000 0.2872340
Данные:
dat <- read.table(text="Row Y X1 X2 X3
1 1 2 3 NA
2 1 3 5 NA
3 1 4 6 NA
4 2 4 6 4
5 3 3 4 8
6 4 4 6 7
7 3 5 5 3
8 5 4 6 7", header=TRUE)