由于对我的上一个问题有所帮助,我进行了一些修改,并使代码正常工作。但是,当我增加r的长度时,最大值未正确存储。谁能找出原因?
对不起,我是菜鸟。
代码:
r <- c(1, 2, 3, 4, 5, 4, 3, 4, 5, 6, 7, 5, 2, 4, 8, 11, 12, 9)
Peaks <- c()
indPeaks <- c()
n <- length(r)-1
for (x in 1:n) {
if ((x-1)<1){
if(r[x+1]<r[x]) {
Peaks <-r[x]
indPeaks <- which(r == r[x])
}
}
else{
if(r[x-1]<r[x]&r[x+1]<r[x]) {
Peaks <-r[x]
indPeaks <- which(r == r[x])
}
}
}
退货(环境):
indPeaks
17 # should be: 5 11 17
Peaks
12 #should be: 5 7 12
该代码适用于
r <- c(1, 2, 3, 4, 5, 4, 3, 4, 5, 6, 7)
答案 0 :(得分:0)
您好,欢迎来到StackOverflow。
您之前的代码起作用的原因是因为它仅包含1个峰值。
如果您为此目的使用for
循环,则需要将先前的值和当前的值进行组合。因此,在您的情况下,将值分配给Peaks
和indPeaks
时。因此代码将是:
r <- c(1, 2, 3, 4, 5, 4, 3, 4, 5, 6, 7, 5, 2, 4, 8, 11, 12, 9)
Peaks <- c()
indPeaks <- c()
n <- length(r)-1
for (x in 1:n) {
if ((x-1)<1){
if(r[x+1]<r[x]) {
Peaks <-c(Peaks,r[x])
indPeaks <- c(indPeaks,x)
}
}
else{
if(r[x-1]<r[x]&r[x+1]<r[x]) {
Peaks <- c(Peaks,r[x])
indPeaks <- c(indPeaks, x)
}
}
}
输出:
> Peaks
[1] 5 7 12
> indPeaks
[1] 5 11 17
请注意,我更改了indPeaks <- c(indPeaks, x)
的最后一部分。先前版本不正确的地方,因为您在r
中有多个与r[x]
相同的值。注意:我并未尝试优化您的代码,我已进行了修复,以使您获得预期的输出。 :)