R中的矩阵插值
interpolation with matrices in R
我想使用线性插值从 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])
我想修改这段代码,使这个函数在许多矩阵上迭代执行。我试过将矩阵放在列表中并重写函数以在列表中的每个矩阵之间进行插值,但一直无法让它工作。非常感谢任何帮助或建议。
谢谢
您可以将所有对象放入一个列表中
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 ...
我想使用线性插值从 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])
我想修改这段代码,使这个函数在许多矩阵上迭代执行。我试过将矩阵放在列表中并重写函数以在列表中的每个矩阵之间进行插值,但一直无法让它工作。非常感谢任何帮助或建议。 谢谢
您可以将所有对象放入一个列表中
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 ...