在非线性点之间生成值

时间:2015-02-27 09:21:56

标签: r

我的目标是使用设定值平滑曲线。为此,我目前在曲线中的点之间生成一个矢量,如下所示:

> y.values <- c(values[1], mean(values[1:2]), values[2], ...)

这不是最简单的说法(这个片段只是两个数字之间!)。我需要一种更好的方法来生成具有已知非线性值的向量,并在每个值之间插入一个值,如下所示:

> values
[1] 1 2 4 6 9
> y.values <- magic(values)
> y.values
[1] 1 1.5 2 3 4 5 6 7.5 9

这个问题感觉基本但我研究了它,似乎无法为我的非线性向量找到合适的方法,任何帮助都表示赞赏。谢谢你的阅读。

1 个答案:

答案 0 :(得分:1)

也许不是最优雅的方式,但它有效:

values <- c(1,2,4,6,9)

#lapply is used to create the mean values and those get merged
#in between your values inside the function

a <- c(unlist(lapply( 1:(length(values)-1 ), function(x) c(values[x],(values[x]+values[x+1])/2))),
       values[length(values)])

输出:

> a
[1] 1.0 1.5 2.0 3.0 4.0 5.0 6.0 7.5 9.0

或作为一项功能:

magic <- function(x) {
  c(unlist(lapply( 1:(length(x)-1 ), function(z) c(x[z],(x[z]+x[z+1])/2))),
         x[length(x)])
}

> magic(values)
[1] 1.0 1.5 2.0 3.0 4.0 5.0 6.0 7.5 9.0