我试图在R中线性插值
MATLAB中的伪代码为u = interp1(u, linspace(1, numel(u), numel(u)-1));
,如果该点位于域外,则外推返回NaN(默认值为here)。
approx rule=1
相当于MATLAB伪代码我不确定第二个interp1
参数在MATLAB中不需要什么,所以我只是让{not} y <- x
不成功
interp1(x, y, xi, method = "linear")
最小代码示例(真实的一个具有> 500 k点,因此线性将起作用)并且其输出位于顶部
List of 2
$ : num [1:3] 1 2 3
$ : num [1:2] 1 2
num [1:2] 0 1
Error in interp1(x, y, xi, method = "linear") :
Points 'xi' outside of range of argument 'x'.
Execution halted
library("pracma") # http://finzi.psych.upenn.edu/library/pracma/html/interp1.html
files <- vector("list", 2)
files[[1]] <- c(1,2,3)
files[[2]] <- c(1,2)
str(files)
# Wanted, MATLAB: u = interp1(u, linspace(1, numel(u), numel(u)-1));
xi <- seq(0,1, len = length(files[[1]]) - 1)
x <- files[[1]]
y <- files[[1]]
str(xi)
files[[1]] <- interp1(x, y, xi, method = "linear")
str(files)
我知道线程using interp1 in R for matrix,但我没有矩阵。
输入:c(1,2,3)
预期输出:[1:2]数据结构
R:3.3.1
操作系统:Debian 8.5
答案 0 :(得分:1)
如果您愿意通过as is the default for linear interpolation/extrapolation in interp1得出NA
值,那么approx()
可以正常工作:
files <- list(1:3,1:2)
xi <- seq(0,1, len = length(files[[1]]) - 1)
x <- files[[1]]
y <- files[[1]]
a <- approx(x,y,xi)
你说你只想要一个双元素向量,所以大概你只想要输出y值:
a$y
## [1] NA 1
这可能看似错误,但对您实际提出的问题是正确答案。您已为files[[1]]
和x
使用y
,因此当输入范围为1到3时,approx()
应返回y = x,{{1} }} 除此以外。在这种情况下,NA
为xi
,因此第一个元素超出了提供的x / y数据的范围......
PS我可以欣赏想要使用[0 1]
来与MATLAB的语法相似,但是 - 虽然pracma
是高质量和广泛使用的 - 基本R函数甚至被更广泛地使用/彻底测试..