我想使用线性插值从2个较小的矩阵中创建一个较大的矩阵。我可以使用这样的函数来做到这一点:
mat1 <- matrix(rep(20, 4), ncol = 2)
mat2 <- matrix(seq(21, 24, 1), ncol = 2)
mat3 <- matrix(c(18, 27, 25, 12), ncol = 2)
num.days <- c(31, 29)
interpolate <- function(initial, final, n){
data.list <- list()
for (i in 1:(n - 1)){
step1 <- (final - initial) / n
step2 <- step1 * i
data.list[[1]] <- initial
data.list[[i+1]] <- round(step2 + initial, 2)
}
newmat = do.call(cbind, data.list)
return(newmat)
}
interpolate(mat1, mat2, num.days[1])
interpolate(mat2, mat3, num.days[2])
我想修改此代码,以便在许多矩阵上迭代执行此功能。我试过将矩阵放在列表中,然后重写函数以在列表中的每个矩阵之间进行插值,但一直无法使其工作。任何帮助或建议,我们将不胜感激。 谢谢。
答案 0 :(得分:0)
您可以将所有对象放入列表中
l <- list(mat1, mat2, mat3, num.days)
并使用lapply()
lapply(1:length(l[[4]]), function(x) interpolate(l[[x]], l[[x + 1]], l[[4]][x]))
屈服
List of 2
$ : num [1:2, 1:62] 20 20 20 20 20 ...
$ : num [1:2, 1:58] 21 22 23 24 20.9 ...