为什么stopifnot没有按预期工作?

时间:2014-03-07 03:31:06

标签: r function break conditional-statements

我想输出水果用户输入的数量,如果它是< 0或者如果它大于数字我希望它打破。不知道为什么它不起作用?!

how.many<-function(fruit, number){
  string<-paste("How many",fruit,"?",sep=" ")
  #cat(string)
  #return(scan(string))
  fruit_number<-readline(string)
  stopifnot(fruit_number>number)
  stopifnot(fruit_number<0)
  return(fruit_number)
}

我应该在数字为4时输出4,但它会中断。 &GT; how.many( “香蕉”,5)

How many banana ?0
Error: fruit_number > number is not TRUE
> how.many("banana",5)
How many banana ?9
Error: fruit_number < 0 is not TRUE
> how.many("banana",5)
How many banana ?4
Error: fruit_number > number is not TRUE

2 个答案:

答案 0 :(得分:2)

你的测试是相反的。您需要指定一个不停止的TRUE值(正如它所说,停止)。

how.many<-function(fruit, number){
    string<-paste("How many",fruit,"?",sep=" ")
    #cat(string)
    #return(scan(string))
    fruit_number<-readline(string)
    stopifnot(fruit_number<=number)
    stopifnot(fruit_number>=0)
    return(fruit_number)
}

> how.many("banana", 5)
How many banana ?9
Error: fruit_number <= number is not TRUE
> how.many("banana", 5)
How many banana ?4
[1] "4"

答案 1 :(得分:1)

stopifnot实际上意味着它所说的:“如果不是就停止(......)”。并且(4> 5)为真。所以它停止了。你想要相反的迹象。