如何在大于测试中使用数字(0)?

时间:2014-04-03 16:40:10

标签: r if-statement for-loop numeric

我在for循环中运行大于测试(见下文):

if(x > y){...}

但是在某一点,y将变为数字(0),而x仍将是数字。所以我需要知道是否还有一种方法可以测试数字是否大于数字(0)。这是我在执行此操作时收到的错误消息:

Error in if (x > y) { : 
  argument is of length zero

在这种情况下,有没有办法测试它,甚至可以用普通的0代替数字(0)?

由于

3 个答案:

答案 0 :(得分:1)

将数字与空值进行比较时应该会发生什么?如果条件x> y评估为TRUE或FALSE,还是应该有不同的效果?处理这种情况的一种方法是:

if (length(y) == 0) {
    cat("y is numeric(0)")
} else {
    if (x > y) {
        cat("x is greater than y")
    } else {
        cat("x is less than or equal y")
    }
}

答案 1 :(得分:1)

另一种方法,取决于(如BigFinger所写)你希望分支的内容,

if(length(x)>0 && x>y ) {do_your_stuff}

我假设您的xy是标量。否则,您需要更加小心,因为if不接受多值结果。

答案 2 :(得分:0)

如果xy始终是标量或numeric(0),并且如果您的问题中numeric(0)等于0,那么您可以编写

if(sum(x) > sum(y)){...}

或在没有{{1}的情况下离开x,如果您知道它永远不会成为sum

之所以有效,是因为numeric(0)给出了sum(numeric(0))

我还没有测试过是否比实施0检查if的{​​{1}}更快,但是我认为它应该更快(更简洁)。