簡體   English   中英

R嵌套,如果語句錯誤“條件的長度> 1,並且將僅使用第一個元素”

[英]R nested if statements error “condition has length > 1 and only the first element will be used”

我正在嘗試在R中執行許多條件事件,但我收到警告:

Warning messages:
1: In if (closeV > openV) { :
  the condition has length > 1 and only the first element will be used
2: In if ((highV - closeV) < Minimum) { :
  the condition has length > 1 and only the first element will be used
3: In if ((openV - lowV) > Threshold) { :
  the condition has length > 1 and only the first element will be used
4: In if (((openV - lowV) < Threshold)) { :
  the condition has length > 1 and only the first element will be used
5: In if ((closeV - openV) < Threshold) { :
  the condition has length > 1 and only the first element will be used
6: In if ((closeV - lowV) < (Threshold * 2)) { :
  the condition has length > 1 and only the first element will be used

這是一個很大的ifs嵌套,目前尚未優化,但是由於該警告,我無法使其正常工作。 該功能中大約有40個ifs,對我需要做什么才能解決此警告有任何想法嗎? 該代碼看起來像這樣

  if(closeV>openV)#1 First we check if we have a positive value
  {
    if((highV-closeV)<Minimum)
    {
      if((openV-lowV) >Threshold)
      {
        if((closeV-openV)<Threshold)
        {
          #3.1 This is a Hammer with positive movement
          if((closeV-lowV)<(Threshold*2))
          {
            #3.1.1 not much movement
            return(X*2)
          }
          else if((closeV-lowV)>(Treshold*2))
          {
            #3.1.2 a lot of movement
            return(X*3)
          }

        }
        else if((closeV-openV)>Threshold)
        {
          #3.2 Hammer but with a lot of movement 
          if((closeV-lowV)<(Threshold*2))
          {
            #3.2.1 not much movement
            return(X)
          }
          else if((closeV-lowV)>(Treshold*2))
          {
            #3.2.2 a lot of movement
            return(X*5)
          }
        }        

      }
      else if(((openV-lowV)<Threshold)

而且它不斷經歷着很多可能性

問題不在於嵌套的if語句,而是您饋入它們的數據結構:警告告訴您比較運算符僅應用於饋送到if語句的數據結構的第一個元素。

a = seq(1, 10, 1)
b = seq(0, 18, 2)

if (a>b){
  print(a)
} else{
  print(b)
}

引發與您相同的警告消息,

a = seq(1, 10, 1)
b = seq(0, 18, 2)

for (i in 1:10) {
  if (a[i]>b[i]){
    print(a[i])
  } else{
    print(b[i])
  }
}

相反,評估很順利。

另外,請注意,盡管這兩段代碼都經過評估,但它們給出的結果卻截然不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM