我寫了一個函數來識別一系列加速度值中的峯值。 (我知道quantmod包& findPeaks函數,但它不能根據我的標準確定峯值。)我想將峯值識別爲在連續三次增加之後並且在連續三次減少之前的任何值。在R中:if語句給出'缺少值,其中TRUE/FALSE required'錯誤,但沒有缺失值
這是我的功能...我很抱歉,如果它非常不雅,但這是我第一次嘗試這樣做。向量x是一系列約900-1200個加速度值;例如1.003841,1.003570,1.003428,1.003261,1.003033,1.002630 ......
peakFinder <- function(x){
diffs <- sign(diff(x))
lags <- 1:length(diffs)
frame <- data.frame(diffs, lags)
frame$diffs <- ifelse(is.na(frame$diffs), 0, frame$diffs)
pks <- 0
for(l in frame$lags){
if ((frame[l,1] == 1) & (frame[l+1,1] == 1) & (frame[l+2,1] == 1)
& (frame[l+3,1] == -1) & (frame[l+4,1] == -1) & (frame[l+5,1] == -1)){
pks <- c(pks, l+2)
}
}
pks <- pks[-1]
pks
}
if語句不斷給我的錯誤 「缺失值,其中TRUE/FALSE需要的」。這是令人困惑的,因爲幀$ diffs或frame $ lag中沒有缺失值。我可能會犯一些其他的基本錯誤,但我無法弄清楚它是什麼。
我真的很感謝一些幫助!
是的,它們與行號相同。 – Laura
當我用你給的例子x向量運行你的函數時,我沒有得到錯誤。它對我來說返回數字(0) –
問題是'frame [l + 3,1]' - 這實際上是NA,'frame [l + 2,1]'也是這樣(我只是運行一個樣本向量'c(1,2,3)' – rbm