在R:if语句中,“缺少值需要TRUE / FALSE”错误,但没有缺失值

时间:2015-10-06 14:06:43

标签: r if-statement

我写了一个函数来识别一系列加速度值中的峰值。 (我知道quantmod包& findPeaks函数,但是根据我的标准,它不能识别峰值。)我想将峰值识别为连续三次增加之后的任何值,并且在连续三次减少之前。

这是我的功能...如果它非常不优雅我道歉,但这是我第一次尝试这样做。矢量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 $ lags中没有缺失值。我可能正在做一些其他的基本错误,但我无法弄清楚它是什么。

我真的很感激一些帮助!

1 个答案:

答案 0 :(得分:0)

好的,我认为稍微简化的版本就是这样:

  x <- c(09,10,12,13,11,09,08,10,12,20,19,18,17) # peak 13 and 20
  if (length(x) >= 7) # assuming length > 7
  {
    diffs <- sign(diff(x))
    pks <- 0
    for(i in 3:(length(diffs)-3))
    {

      if (all(diffs[(i-2):(i)]==+1) && all(diffs[(i+1):(i+3)] == -1))
      {
        print(paste("Peak at", x[i+1]))
      }
    }
  }

执行时打印

[1] "Peak at 13"
[1] "Peak at 20"

所以你可以将它用于你的功能。