用R中的矩阵进行插值

时间:2018-07-30 15:32:43

标签: r interpolation

我想使用线性插值从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])

我想修改此代码,以便在许多矩阵上迭代执行此功能。我试过将矩阵放在列表中,然后重写函数以在列表中的每个矩阵之间进行插值,但一直无法使其工作。任何帮助或建议,我们将不胜感激。 谢谢。

1 个答案:

答案 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 ...