如何在 R 中保存和加载样条插值函数?
How to save and load spline interpolation functions in R?
我需要创建成千上万个插值样条,每个都基于 5 对 (x, y)
值。我想将它们保存在数据库(或 csv 文件)中。
我如何导出/导入它们,例如以文本格式或作为实际参数数组以在需要时重建每个函数?
如果您使用的是 R 基础包 stats
中的 splinefun
函数,导出其构造信息非常容易。
set.seed(0)
xk <- c(0, 1, 2)
yk <- round(runif(3), 2)
f <- splinefun(xk, yk, "natural") ## natural cubic spline
construction_info <- environment(f)$z
str(construction_info)
# $ method: int 2
# $ n : int 3
# $ x : num [1:3] 0 1 2
# $ y : num [1:3] 0.9 0.27 0.37
# $ b : num [1:3] -0.812 -0.265 0.282
# $ c : num [1:3] 0 0.547 0
# $ d : num [1:3] 0.182 -0.182 0
下面说明了它们的含义以及我们如何手动重建样条曲线。
有n = 3个点,(x[i], y[i])
,所以是两块。
attach(construction_info)
## plot the interpolation spline in gray
curve(f(x, 0), from = x[1], to = x[n], lwd = 10, col = 8)
## highlight knots
points(x, y, pch = 19)
## piecewise re-construction
piece_cubic <- function (x, xi, yi, bi, ci, di) {
yi + bi * (x - xi) + ci * (x - xi) ^ 2 + di * (x - xi) ^ 3
}
## loop through pieces
for (i in 1:(n - 1)) {
curve(piece_cubic(x, x[i], y[i], b[i], c[i], d[i]), from = x[i], to = x[i + 1],
add = TRUE, col = i + 1)
}
detach(construction_info)
我们看到我们手动重构是正确的
导出构造信息使我们能够远离 R 并在其他地方使用它。
我需要创建成千上万个插值样条,每个都基于 5 对 (x, y)
值。我想将它们保存在数据库(或 csv 文件)中。
我如何导出/导入它们,例如以文本格式或作为实际参数数组以在需要时重建每个函数?
如果您使用的是 R 基础包 stats
中的 splinefun
函数,导出其构造信息非常容易。
set.seed(0)
xk <- c(0, 1, 2)
yk <- round(runif(3), 2)
f <- splinefun(xk, yk, "natural") ## natural cubic spline
construction_info <- environment(f)$z
str(construction_info)
# $ method: int 2
# $ n : int 3
# $ x : num [1:3] 0 1 2
# $ y : num [1:3] 0.9 0.27 0.37
# $ b : num [1:3] -0.812 -0.265 0.282
# $ c : num [1:3] 0 0.547 0
# $ d : num [1:3] 0.182 -0.182 0
下面说明了它们的含义以及我们如何手动重建样条曲线。
有n = 3个点,(x[i], y[i])
,所以是两块。
attach(construction_info)
## plot the interpolation spline in gray
curve(f(x, 0), from = x[1], to = x[n], lwd = 10, col = 8)
## highlight knots
points(x, y, pch = 19)
## piecewise re-construction
piece_cubic <- function (x, xi, yi, bi, ci, di) {
yi + bi * (x - xi) + ci * (x - xi) ^ 2 + di * (x - xi) ^ 3
}
## loop through pieces
for (i in 1:(n - 1)) {
curve(piece_cubic(x, x[i], y[i], b[i], c[i], d[i]), from = x[i], to = x[i + 1],
add = TRUE, col = i + 1)
}
detach(construction_info)
我们看到我们手动重构是正确的
导出构造信息使我们能够远离 R 并在其他地方使用它。