我在for循环中运行大于测试(见下文):
if(x > y){...}
但是在某一点,y将变为数字(0),而x仍将是数字。所以我需要知道是否还有一种方法可以测试数字是否大于数字(0)。这是我在执行此操作时收到的错误消息:
Error in if (x > y) { :
argument is of length zero
在这种情况下,有没有办法测试它,甚至可以用普通的0代替数字(0)?
由于
答案 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}
我假设您的x
和y
是标量。否则,您需要更加小心,因为if
不接受多值结果。
答案 2 :(得分:0)
如果x
和y
始终是标量或numeric(0)
,并且如果您的问题中numeric(0)
等于0,那么您可以编写
if(sum(x) > sum(y)){...}
或在没有{{1}的情况下离开x
,如果您知道它永远不会成为sum
。
之所以有效,是因为numeric(0)
给出了sum(numeric(0))
。
我还没有测试过是否比实施0
检查if
的{{1}}更快,但是我认为它应该更快(更简洁)。