【问题标题】:Error in while : missing value where TRUE/FALSE needed [duplicate]while 出错:需要 TRUE/FALSE 的缺失值 [重复]
【发布时间】:2013-12-10 00:29:21
【问题描述】:

我是 R 的新手,我陷入了一个愚蠢的错误。虽然我发现了一些可以解决我的问题的问题,但我无法解决它。

ww <- waveMC_list[[5]]
sampling=44100
thresh=10

timer.output <- timer(ww, f=sampling, threshold=thresh,envt="abs",ksmooth=kernel("daniell",100))


i=0
min.length=0.05                    # minimum length of segment
segmts=length(timer.output[[4]])   # total amount of segments to evaluate
segments <- list()                 # output of valid segments
starts=timer.output[[4]]           # starting times
ends=timer.output[[5]]             # ending times



for(i in 1:segmts)
{
  if(i <= segmts)
  {
  while(starts[i] <= ends[i]) #print(TRUE)
    {
    if((ends[i]-starts[i])>min.length)
      {
       segments[[i]] <- env(WaveMC(cutw(ww, f=44100, from= starts[i], to=ends[i],plot=F), bit= 16, samp.rate=44100)
                            , f=44100, ksmooth=kernel("daniell",90),plot=F)
       print(paste('check', i, sep=' '))
       print(segmts)
          #env("ACAWAVEFILE", f=44100, ksmooth=kernel("daniell",90)) 
      }   
       i=i+1
    }
  }
}

Error in while (starts[i] <= ends[i]) { : 

需要 TRUE/FALSE 的地方缺少值

【问题讨论】:

    标签: r error-handling while-loop


    【解决方案1】:

    错误意味着if 条件的计算结果为NA。当任一操作数为NA 时,就会发生这种情况。检查输入向量中包含的值。


    旧回复,仍然相关,但会导致不同的错误消息:

    错误意味着您的if 条件是一个空向量。为什么是空的?好吧,因为这部分:

    (ends[i]-starts[i])
    

    endsstarts 都是单个元素:

    starts=timer.output[[4]]           # starting times
    ends=timer.output[[5]]             # ending times
    

    当然ends[i]starts[i] 只会为i==1 返回一个元素,为任何其他值返回一个空向量。

    【讨论】:

    • 有什么线索可以避免吗?
    • 已经解决了!谢谢!
    • 不是空的,但不适用。看到while(c()) print("hi")while(NA) print("hi")的错误信息是不同的。他的starts[i]ends[i] 之一必须是NA
    • @flodel 不错的收获。我将保留我的旧回复,因为这也是一个常见错误。
    猜你喜欢
    • 2015-01-17
    • 2014-06-06
    • 2017-10-01
    • 1970-01-01
    • 2019-03-07
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多