【问题标题】:Error: "the condition has length > 1 and only the first element will be used"错误:“条件长度 > 1,仅使用第一个元素”
【发布时间】:2021-01-19 15:50:45
【问题描述】:

我的目标是根据每个测量径流水平(“ q347_2035"),这里是 283 个测量值的向量。所以例如如果 q347_2035 大于 60 且小于/等于 160,则最小径流计算为 q347_2035 的一部分(参见下面的代码):

getQMIN <- if(q347_2035 <= 60){
  qMin_2035 = 50
} else if (q347_2035>60 & q347_2035 <= 160) {
  qMin_2035 = 50 + (8/10)*(q347_2035 - 60)
} else if (q347_2035>=160 & q347_2035 <= 500) {
  qMin_2035 = 130 + (4.4/10)*(q347_2035 - 160)
} else if (q347_2035>=500 & q347_2035 <= 2500) {
  qMin_2035 = 280 + (31/100)*(q347_2035 - 500)
} else if (q347_2035>=2500 & q347_2035 < 10000) {
  qMin_2035 = 900 + (21.3/100)*(q347_2035 - 2500)
} else if (q347_2035>=10000 & q347_2035 < 60000) {
  qMin_2035 = 2500 + (150/1000)*(q347_2035 - 10000)
} else {
  qMin_2035 = 10000
}

现在我总是收到错误消息,说:

Warning messages:
1: In if (q347_2035 <= 60) { :
  the condition has length > 1 and only the first element will be used
2: In if (q347_2035 > 60 & q347_2035 <= 160) { :
  the condition has length > 1 and only the first element will be used
3: In if (q347_2035 >= 160 & q347_2035 <= 500) { :
  the condition has length > 1 and only the first element will be used
4: In if (q347_2035 >= 500 & q347_2035 <= 2500) { :
  the condition has length > 1 and only the first element will be used

谁能帮忙解决这个问题? 提前非常感谢!

【问题讨论】:

    标签: r if-statement


    【解决方案1】:

    尝试在您的语句中使用 && 而不是 &。有关原因的进一步解释,请查看此帖子的答案:Boolean operators && and ||

    q347_2035 = 60
    
    getQMIN <- if(q347_2035 <= 60){
    qMin_2035 = 50
    } else if (q347_2035>60 && q347_2035 <= 160) {
    qMin_2035 = 50 + (8/10)*(q347_2035 - 60)
    } else if (q347_2035>=160 && q347_2035 <= 500) {
    qMin_2035 = 130 + (4.4/10)*(q347_2035 - 160)
    } else if (q347_2035>=500 && q347_2035 <= 2500) {
    qMin_2035 = 280 + (31/100)*(q347_2035 - 500)
    } else if (q347_2035>=2500 && q347_2035 < 10000) {
    qMin_2035 = 900 + (21.3/100)*(q347_2035 - 2500)
    } else if (q347_2035>=10000 && q347_2035 < 60000) {
    qMin_2035 = 2500 + (150/1000)*(q347_2035 - 10000)
    } else {
    qMin_2035 = 10000
    }
    
    getQMIN #Result is 50
    

    【讨论】:

    • 谢谢,这行得通,但不幸的是第一行不行:if (q347_2035
    • 它应该适用于我上面发布的答案。尝试在调用 getQMIN 之前再次运行所有代码,因为如果不这样做,您将得到错误的数字。我将编辑我的答案并发布正确的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    相关资源
    最近更新 更多