gpt4 book ai didi

r - 使用 pracma::findpeaks 识别持续峰值

转载 作者:行者123 更新时间:2023-12-05 03:07:18 27 4
gpt4 key购买 nike

我在 pramca R 包(v. 2.1.1 ).我正在使用 R 3.4.3 x64 窗口。

我想要识别可能有两个重复值的峰值的函数,我相信选项 peakpat 是我可以做到这一点的方法。

这个问题已经asked before ,但是我还没有找到一个例子来说明如何实现 Hans 所指的选项。这看起来很基础,而且在编码方面我也是一个初学者。在help file online , 它说了以下关于 peakpat 的内容:

define a peak as a regular pattern, such as the default pattern ``[+]1,[-]1,''; if a pattern is provided, the parameters nups and ndowns are not taken into account."

我在解释 "[+]1,[-]1" 的含义时遇到问题。有任何想法吗?我已经尝试过我认为这意味着什么的变体,但每次尝试都会导致 NULL。请参阅下面的示例,非常感谢任何帮助/见解。

    # Example:
install.packages("pracma")
library(pracma)
subset = c(570,584,500,310,261,265,272,313,314,315,330,360,410,410,360,365,368,391,390,414)


# Plots
plot(subset)
lines(subset)


# findpeaks without defining repeated values;
# the result does not identify the peak at subset[13:14] (repeated 'peak' values)
result = findpeaks(subset)
pks1 = data.matrix(result[,1])
locs1 = data.matrix(result[,2])


# findpeaks with my futile attempt at defining peakpat
result = findpeaks(subset, nups=2, ndowns=nups, zero = "0", peakpat="[+]2,[-]2,")
result = findpeaks(subset, nups=1, ndowns=nups, zero = "0", peakpat="[+]1,[-]1,")
result = findpeaks(subset, nups=1, ndowns=nups, zero = "0", peakpat="[+]{,1},[-]{,1}")
result = findpeaks(subset, nups=1, ndowns=nups, zero = "0", peakpat="[+]{1,},[-]{1,}")
result = findpeaks(subset, nups=2, ndowns=nups, zero = "0", peakpat="[2],[2]")
result = findpeaks(subset, nups=2, ndowns=nups, zero = "0", peakpat="[1],[1]")

# all of the above results in NULL

谢谢!

最佳答案

文档在这种情况下没有太大帮助,但您可以通过检查函数体获得一些线索。

在控制台中输入函数名称可以让您检查其源代码。无需详细介绍,这一行很有帮助:

peakpat <- sprintf("[+]{%d,}[-]{%d,}", nups, ndowns)

这向我们展示了默认参数对应于 "[+]{1,}[-]{1,}" 的峰值.

如果您指定 peakpat,这也应该强化为什么,您无需为 nups 指定任何内容和 ndowns .

针对两个重复值的峰值执行您所追求的模式:

result <- findpeaks(subset, peakpat = "[+]{1,}[0]{1,}[-]{1,}")

逗号指定一个间隔。因此,如果您想将搜索限制为重复值最多为 3 的峰:

result <- findpeaks(subset, peakpat = "[+]{1,}[0]{1,2}[-]{1,}")

该函数的工作原理是将您的数据转换为字符串并应用正则表达式,因此应适用正则表达式的常用规则。

关于r - 使用 pracma::findpeaks 识别持续峰值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47914035/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com