2013-11-25 31 views
1

我是R新手,我被困在一个愚蠢的错误..尽管我发现了一些问题来解决我的问题,我无法解决它。错误while:缺少值,其中TRUE/FALSE需要

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所需

回答

2

的错误意味着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和空载体任何其他价值。

+0

任何线索我怎么能避免它? – marutonic

+0

已经解决了!谢谢! – marutonic

+1

不是空的,但是不适用。查看while(c())print(“hi”)和while(NA)print(“hi”)的错误信息是不同的。他的一个'开始[i]'或'结束[i]'必须是'NA'。 – flodel

相关问题