You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中使用approx()对列表中的值进行插值的方法

列表数据插值的解决方法

approx()函数只接受向量类型的x和y参数,直接传列表肯定报错。你有两组(x,y)配对数据(列表里的每个元素是一组),可以用多参数遍历函数分别处理每组数据,下面给两种实用方法:

基础R解法(无需额外包)

用mapply()来配对遍历x和y的对应元素,对每组分别执行插值:

x <- list(c(20, 25), c(24, 25))
y <- list(c(0.98, 0.96), c(0.94, 0.96))
xout <- c(23.1, 24, 1)

# 对每组(xi,yi)做插值,提取y的结果
interp_result <- mapply(function(xi, yi) approx(xi, yi, xout = xout)$y, x, y)

运行后interp_result是一个矩阵,每一列对应一组数据的插值结果:

[,1] [,2]
[1,] 0.964  NA
[2,] 0.968 0.94
[3,]    NA  NA

允许外插(处理超出x范围的xout值)

如果想对xout中超出原x范围的数值(比如例子里的1)做外插,加上rule=2参数,会用端点值填充:

interp_result <- mapply(function(xi, yi) approx(xi, yi, xout = xout, rule = 2)$y, x, y)

结果会变成:

[,1] [,2]
[1] 0.964 0.94
[2] 0.968 0.94
[3] 0.980 0.94

tidyverse风格解法(用purrr包)

如果你习惯用tidyverse工具,可以用purrr::map2(),返回和输入结构一致的列表:

library(purrr)

interp_result <- map2(x, y, ~approx(.x, .y, xout = xout, rule = 2)$y)

结果是列表,每个元素对应一组的插值向量:

[[1]]
[1] 0.964 0.968 0.980

[[2]]
[1] 0.94 0.94 0.94

注:你之前用apply()失败是因为它只处理数组/矩阵的维度遍历,不适合这种多列表的配对操作,mapply()或map2()才是对应场景的工具。

内容的提问来源于stack exchange,提问作者Tamara Vaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:51:02