R中函数的计算期

时间:2013-01-17 09:29:21

标签: r function period

某些功能的计算周期有任何R包吗?我正在寻找像这样的r函数:

x <- seq(0, 50, by = 0.05)
y <- sin(x)
p <- calcPeriod(x, y) # result = 2pi

3 个答案:

答案 0 :(得分:5)

我认为你正在寻找快速傅立叶变换的东西。我不是专家,但我认为你可以按照以下方式做点什么:

x <- seq(0, 50, by = 0.05)
y <- sin(x)

calcPeriod <- function(x, y){
    incr <- x[2] - x[1]
    tmp <- spectrum(y, plot=FALSE)
    p <- (1/tmp$freq*incr)[which.max(tmp$spec)] # max of spectrum
    p
}

calcPeriod(x,y) # equals 6.4

函数spectrum实际上是spec.pgramspec.ar的包装函数。请谨慎使用,因为calcPeriod功能实际上只识别最大周期。对于不均匀采样的序列,最小二乘的谱​​图分析也可以识别主导周期(example link)。

答案 1 :(得分:1)

Paul H.的回答提醒我,如果您不想处理傅立叶分析,您可以随时运行nls(y~sin(k*x))或其增强版本。这确实假设您事先知道数据中只有一个频率。

我会把我常用的插件放在Eureqa,可以通过Google轻松找到Cornell.edu。

答案 2 :(得分:0)

我自己并不知道这样的功能,但您可以使用optim来优化以句点作为参数的成本函数。然后optim将调整周期,直到获得最佳拟合。这不是很难做到,你可以自己将它包装成一个函数calcPeriod