求局部最大值和极小值

求局部最大值和极小值

我正在寻找一种计算效率高的方法来为R中的大量数字寻找局部极大值/极小值,希望没有for循环.。

例如,如果我有一个数据文件,如1 2 3 2 1 1 2 1,我希望函数返回3和7,这是局部最大值的位置。


青春有我
浏览 566回答 3
3回答

杨__羊羊

使用动物园库函数ROLLApply:x&nbsp;<-&nbsp;c(1,&nbsp;2,&nbsp;3,&nbsp;2,&nbsp;1,&nbsp;1,&nbsp;2,&nbsp;1)library(zoo) &nbsp;xz&nbsp;<-&nbsp;as.zoo(x) &nbsp;rollapply(xz,&nbsp;3,&nbsp;function(x)&nbsp;which.min(x)==2)#&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;#FALSE&nbsp;FALSE&nbsp;FALSE&nbsp;&nbsp;TRUE&nbsp;FALSE&nbsp;FALSE&nbsp; &nbsp;rollapply(xz,&nbsp;3,&nbsp;function(x)&nbsp;which.max(x)==2)#&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;#FALSE&nbsp;&nbsp;TRUE&nbsp;FALSE&nbsp;FALSE&nbsp;FALSE&nbsp;&nbsp;TRUE然后,使用‘CoreData’对‘wh.max’是一个“中心值”表示局部最大值的值提取索引。显然,对于局部极小值,您也可以使用which.min而不是which.max.&nbsp;rxz&nbsp;<-&nbsp;rollapply(xz,&nbsp;3,&nbsp;function(x)&nbsp;which.max(x)==2) &nbsp;index(rxz)[coredata(rxz)]#[1]&nbsp;3&nbsp;7我假设你不想要开始值或结束值,但是如果你想要,你可以在处理之前先把矢量的末端垫好,就像端粒在染色体上一样。(我注意到了ppc软件包(用于进行质谱分析的“峰值概率对比”),仅仅是因为在阅读@BenBolker上面的评论之前,我还不知道它的可用性,我认为添加这几个词将增加具有大众兴趣的人在搜索中看到这一点的可能性。)
打开App,查看更多内容
随时随地看视频慕课网APP